如何确保我的片段的内容视图在提交后可供访问?

时间:2012-05-01 15:41:41

标签: android fragment

所以我有一个运行Login过程的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()安排了操作,所以我想知道如何以正确的方式访问片段的视图组件。

提前致谢。

0 个答案:

没有答案