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