Android 如何确保我的片段';的内容视图在提交后可供访问?
因此,我有一个运行登录过程的Android 如何确保我的片段';的内容视图在提交后可供访问?,android,fragment,Android,Fragment,因此,我有一个运行登录过程的AsyncTask。在运行之前,我打开一个事务并提交一个DialogFragment,向用户显示一个进度对话框,其中有一个ok按钮。 我想禁用它,只有在登录由于某种原因失败时才启用它,用户可以单击它并关闭它(实际上是从堆栈中弹出对话框片段)。 我只能访问该按钮,以便在解决方法注释后的下面代码部分中禁用它 我试图将该代码放在DialogFragment中重写的onAttach()和onStart()中,但它总是返回NullPointerException 这是我的密码:
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);
}
});
...
}
}
类登录任务扩展异步任务{
私人对话;
@凌驾
受保护的void onPreExecute(){
df=新的DialogFragment(){
创建对话框上的公共对话框(Bundle savedInstanceState){
ProgressDialog pd=新建ProgressDialog(LoginActivity.this,ProgressDialog.THEME\u HOLO\u LIGHT);
pd.SetUndeterminate(真);
pd.可设置可取消(假);
pd.setMessage(getString(R.string.login_message));
pd.setTitle(getString(R.string.login_title));
pd.setButton(ProgressDialog.BUTTON_正数,getString(R.string.ok),new DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
getFragmentManager().popBackStack();
}
});
返回pd;
};
};
getFragmentManager().beginTransaction().add(df,“LOGIN_DLG_FRAG”).commit();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
//变通办法
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
((ProgressDialog)df.getDialog()).getButton(ProgressDialog.BUTTON_正数)。setEnabled(false);
}
});
...
}
}
我知道FragmentTransaction.commit()
计划操作,因此我想知道如何以正确的方式访问片段的视图组件
提前谢谢