【问题标题】:ProgressDialog is not closing with BroadcastReceiverProgressDialog 未与 BroadcastReceiver 一起关闭
【发布时间】:2015-09-15 06:01:24
【问题描述】:

我正在使用 BroadcatReceiver 来监控 wi-fi 状态变化。

我想在操作过程中显示ProgressDialog

显示正常,但未关闭。

我的代码如下::

private final BroadcastReceiver mBluetoothChangeReceiver = new BroadcastReceiver()
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        final String action = intent.getAction();

        if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED))
        {
            final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
            switch (state)
            {
            case BluetoothAdapter.STATE_OFF:
                Log.i(TAG, "STATE_OFF");
                showProgress(false);
                // showToast("Bluetooth off");
                break;
            case BluetoothAdapter.STATE_TURNING_OFF:
                Log.i(TAG, "STATE_TURNING_OFF");
                showProgress(true);
                // showToast("Turning Bluetooth off...");
                break;
            case BluetoothAdapter.STATE_ON:
                Log.i(TAG, "STATE_ON");
                showProgress(false);
                // showToast("Bluetooth on");
                break;
            case BluetoothAdapter.STATE_TURNING_ON:
                Log.i(TAG, "STATE_TURNING_ON");
                showProgress(true);
                // showToast("Turning Bluetooth on...");

                break;
            }
        }
    }
};


public void showProgress(boolean show)
{
    ProgressDialog mProgressDialog;
    mProgressDialog = new ProgressDialog(ShortcutActivity.this);

    mProgressDialog.setMessage(mContext.getString(R.string.settings_msg));
    if (show)
    {
        mProgressDialog.setCancelable(false);
        if (!mProgressDialog.isShowing())
            mProgressDialog.show();
    }
    else
    {
        Log.i(TAG, " " + mProgressDialog.isShowing());
        mProgressDialog.setCancelable(true);
        if (mProgressDialog.isShowing())
        {
            mProgressDialog.dismiss();
        }
    }
}`

如果我的实现包含任何错误,请向我提出解决方案。 或者我的实现方式不对。

【问题讨论】:

  • 显示showProgress方法
  • 在您的 showProgress 方法中,每次调用时都会创建一个新的 Progressdialog。您必须关闭现有的 ProgressDialog(当前显示的那个),而不是新创建的。
  • 您每次都在创建 ProgressDialog 的新实例,因此它不会关闭之前启动的 ProgressDialog
  • 你必须创建一个listener,它可以有一个回调方法来关闭对话框。
  • ProgressDialog 只创建一次.. 这是在 onCreate 中创建并在 .. 中使用

标签: android progressdialog android-wifi android-broadcast android-broadcastreceiver


【解决方案1】:
  1. 将以下内容设为全局变量

    ProgressDialog mProgressDialog;
    
  2. OnCreate()

    mProgressDialog = new ProgressDialog(ShortcutActivity.this);
    mProgressDialog.setMessage(mContext.getString(R.string.settings_msg));
    

3.

private final BroadcastReceiver mBluetoothChangeReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
    final String action = intent.getAction();

    if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED))
    {
        final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
        switch (state)
        {
        case BluetoothAdapter.STATE_OFF:
            Log.i(TAG, "STATE_OFF");
            showProgress(false);
            // showToast("Bluetooth off");
            break;
        case BluetoothAdapter.STATE_TURNING_OFF:
            Log.i(TAG, "STATE_TURNING_OFF");
            showProgress(true);
            // showToast("Turning Bluetooth off...");
            break;
        case BluetoothAdapter.STATE_ON:
            Log.i(TAG, "STATE_ON");
            showProgress(false);
            // showToast("Bluetooth on");
            break;
        case BluetoothAdapter.STATE_TURNING_ON:
            Log.i(TAG, "STATE_TURNING_ON");
            showProgress(true);
            // showToast("Turning Bluetooth on...");

            break;
        }
    }
}

};

4.

 public void showProgress(boolean show)
  {

if (show)
{
    mProgressDialog.setCancelable(false);
    if (!mProgressDialog.isShowing())
        mProgressDialog.show();
}
else
{
    Log.i(TAG, " " + mProgressDialog.isShowing());
    mProgressDialog.setCancelable(true);
    if (mProgressDialog.isShowing())
    {
        mProgressDialog.dismiss();
    }
}}

【讨论】:

    【解决方案2】:

    在您的 showProgress 方法中,每次调用它时都会创建一个新的 Progressdialog。您必须关闭现有的 ProgressDialog(当前显示的那个),而不是新创建的。

    没错。

    【讨论】:

      【解决方案3】:

      我创造了 ProgressDialog mProgressDialog; 在外部并在 onCreate() 中启动它

      mProgressDialog = new ProgressDialog(ShortcutActivity.this);。现在它工作正常。

      感谢您的建议

      【讨论】:

        【解决方案4】:

        你需要在你的“showProgress”方法和showProgress方法之外声明mProgressDialog,如果它为null,则初始化mProgressDialog

        private final BroadcastReceiver mBluetoothChangeReceiver = new BroadcastReceiver()
        {
        
            @Override
            public void onReceive(Context context, Intent intent)
            {
                final String action = intent.getAction();
        
                if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED))
                {
                    final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
                    switch (state)
                    {
                    case BluetoothAdapter.STATE_OFF:
                        Log.i(TAG, "STATE_OFF");
                        showProgress(false);
                        // showToast("Bluetooth off");
                        break;
                    case BluetoothAdapter.STATE_TURNING_OFF:
                        Log.i(TAG, "STATE_TURNING_OFF");
                        showProgress(true);
                        // showToast("Turning Bluetooth off...");
                        break;
                    case BluetoothAdapter.STATE_ON:
                        Log.i(TAG, "STATE_ON");
                        showProgress(false);
                        // showToast("Bluetooth on");
                        break;
                    case BluetoothAdapter.STATE_TURNING_ON:
                        Log.i(TAG, "STATE_TURNING_ON");
                        showProgress(true);
                        // showToast("Turning Bluetooth on...");
        
                        break;
                    }
                }
            }
        };
        
        ProgressDialog mProgressDialog;
        public void showProgress(boolean show)
        {
            if (mProgressDialog == null)
                mProgressDialog = new ProgressDialog(ShortcutActivity.this);
        
            mProgressDialog.setMessage(mContext.getString(R.string.settings_msg));
            if (show)
            {
                mProgressDialog.setCancelable(false);
                if (!mProgressDialog.isShowing())
                    mProgressDialog.show();
            }
            else
            {
                Log.i(TAG, " " + mProgressDialog.isShowing());
                mProgressDialog.setCancelable(true);
                if (mProgressDialog.isShowing())
                {
                    mProgressDialog.dismiss();
                }
            }
        }
        

        【讨论】:

        • 即使我需要在外面发起mProgressDialog
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多