2

したがって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()ので、フラグメントのビュー コンポーネントに正しい方法でアクセスする方法を知りたいです。

前もって感謝します。

4

0 に答える 0