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