代码之家  ›  专栏  ›  技术社区  ›  Raju-san

ProgressDialog未与BroadcastReceiver一起关闭

  •  0
  • Raju-san  · 技术社区  · 10 年前

    我正在使用 广播接收机 监控 无线局域网 状态更改。

    我想展示 进度对话框 在操作期间。

    它显示正确,但未关闭。

    我的代码如下:

    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();
            }
        }
    }`
    

    如果我的实现包含任何错误,请向我建议解决方案。 或者我的实施方式是错误的。

    4 回复  |  直到 10 年前
        1
  •  1
  •   Shivani Gupta    10 年前
    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
  •  1
  •   long zefang    10 年前

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

    那个权利

        3
  •  0
  •   Raju-san    10 年前

    我创建了 ProgressDialog mProgressDialog; 从外面开始 onCreate()

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

    谢谢你的建议

        4
  •  0
  •   Amit    10 年前

    您需要在“showProgress”方法外部和showProgress方法内部声明mProgressDialog,如果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();
            }
        }
    }
    
    推荐文章