当Activity为launchMode =“SingleTask”时,进度对话框未显示2次

时间:2017-02-02 10:46:48

标签: android android-asynctask progressdialog

您好,我遇到了ProgressDialog在Activity有launchMode="SingleTask"时没有显示第二次的问题。

我必须将Activity作为SingleTask。第一次单击按钮时,对话框正在显示,但是当我关闭活动并再次启动时,我单击按钮ProgressDialog不再显示。

我的代码:

private class FakeTask extends AsyncTask<Integer, Void, Void>{
        private FakeCallBackListener mListener;
        FakeTask(FakeCallBackListener listener){
            mListener = listener;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            mProgressDialog = new ProgressDialog(mContext);
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            mProgressDialog.setIndeterminate(true);
            mProgressDialog.setMessage(mContext.getString(R.string.processing_data));
            mProgressDialog.setCancelable(false);
            mProgressDialog.setInverseBackgroundForced(true);
            if (!((Activity)mContext).isFinishing()){
                mProgressDialog.show();
            }
        }

        @Override
        protected Void doInBackground(Integer... params) {
            try {
                Thread.sleep(params[0]);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            mProgressDialog.dismiss();
        }
    }

当点击按钮时,我只需要调用它:

new FakeTask(listener).execute(delay);

在特定Activity中的清单中我有:

android:launchMode="singleTask"

有什么建议吗?我知道,因为活动实际上没有被销毁,所以将上下文传递给死对话框。但是我如何修复每次显示的对话框?

1 个答案:

答案 0 :(得分:1)

我认为您在访问mContext时遇到问题。

为什么不将它作为参数传递给FakeTask构造函数?

private FakeCallBackListener mListener;
private Context mContext;

FakeTask(Context context, FakeCallBackListener listener) {
    mContext = context;
    mListener = listener;
}