2

所以我有一个AsyncTask运行登录程序的程序。在运行之前,我打开一个事务并提交一个 DialogFragment 以向用户显示一个进度对话框,其中包含一个 ok 按钮。我想让它禁用,仅在/如果登录因某种原因失败并且用户可以单击它并关闭(实际上从堆栈中弹出对话框片段)时启用它。
我只能访问该按钮,以便在解决方法注释之后的代码部分中禁用它。

我试图将该代码放在DialogFragment 的覆盖onAttach()和内部,但它总是返回。onStart()NullPointerException

这是我的代码:

 class LoginTask extends AsyncTask<String, Integer, String> {
        private DialogFragment  df;

        @Override
        protected void onPreExecute() {
            df = new DialogFragment() {
                public Dialog onCreateDialog(Bundle savedInstanceState) {
                    ProgressDialog pd = new ProgressDialog(LoginActivity.this, ProgressDialog.THEME_HOLO_LIGHT);
                    pd.setIndeterminate(true);
                    pd.setCancelable(false);
                    pd.setMessage(getString(R.string.login_message));
                    pd.setTitle(getString(R.string.login_title));
                    pd.setButton(ProgressDialog.BUTTON_POSITIVE, getString(R.string.ok), new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            getFragmentManager().popBackStack();
                        }
                    });
                    return pd;
                };
            };
            getFragmentManager().beginTransaction().add(df, "LOGIN_DLG_FRAG").commit();
        }

        @Override
        protected String doInBackground(String... params) {
                        // WORKAROUND
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    ((ProgressDialog)df.getDialog()).getButton(ProgressDialog.BUTTON_POSITIVE).setEnabled(false);
                }
            });
                         ...
      }
     }

我知道FragmentTransaction.commit()操作的计划,所以我想知道如何以正确的方式访问片段的视图组件。

提前致谢。

4

0 回答 0