したがってAsyncTask
、ログイン手順を実行する があります。実行する前に、トランザクションを開き、DialogFragment をコミットして、[OK] ボタンを含む進行状況ダイアログをユーザーに表示します。私はそれを無効にしたいと思います.ログインが何らかの理由で失敗した場合にのみ有効にし、ユーザーがそれをクリックして閉じることができます(実際にはスタックからダイアログフラグメントをポップアウトします)。
回避策のコメントの後のコードの一部でボタンを無効にするためにのみ、ボタンにアクセスできます。
onAttach()
そのコードをオーバーライドされた内部onStart()
とDialogFragmentの内部に入れようとしましたが、常に返され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()
ので、フラグメントのビュー コンポーネントに正しい方法でアクセスする方法を知りたいです。
前もって感謝します。