2

私は典型的な問題に遭遇しました、そしてそれは私には奇妙に思えます。詳細は次のようになります-私のアプリのアクティビティには、編集テキストと送信ボタンがあります。編集テキストにデータを入力した後、ユーザーは送信ボタンをクリックできます。[送信]ボタンをクリックすると、ユーザーが入力した値に基づいて、2つのアラートダイアログのいずれかが表示されます。1つは成功で、もう1つは失敗します。

ユーザーが無効なデータを入力して送信ボタンをクリックすると、失敗したアラートダイアログが開きます。失敗したアラートダイアログにボタン(OK)があります。クリックした後dialog.dismiss();、ユーザーがデータを再確認して変更できるように、ボタン(OK)をクリックして非表示にしました。しかし、問題は、彼が向きを変更した場合にデータを再確認および変更しているときに、送信ボタンをクリックしなくても失敗したアラートダイアログがポップアップすることです。提案してください。

追加の詳細(この問題にはおそらく必要ありませんが):向きを変更している間、アクティビティが再作成されます。そのため、現在のデータをonSavedInstanceState()に保存し、onCreate()メソッドで取得して、edittextsの値を元に戻しています。すべて正常に動作しますが、送信ボタンをクリックすると、それぞれのアラートダイアログが表示されます。次に、向きを変更した後、ダイアログが再びポップアップします。私はshowDialog(1);を書いたと確信しています。onClick()メソッドでは、コントロールがonClickに戻り、クリックしなくてもアラートダイアログが表示されるのはなぜですか。

protected Dialog onCreateDialog(int id) {
   switch(id){                 
      case 0:          
        return new AlertDialog.Builder(this)
                      .setMessage("Success!") 
                      .setIcon(R.drawable.success)
                      .setPositiveButton("OK",
                      new DialogInterface.OnClickListener() {
                         @Override
                         public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();                   
                         }
                      }).show();
       case 1:
           return new AlertDialog.Builder(this)
                      .setMessage("Failed")
                      .setIcon(R.drawable.failure)
                      .setPositiveButton("OK",
                       new DialogInterface.OnClickListener() {

                           @Override
                           public void onClick(DialogInterface dialog, int which) {
                              dialog.dismiss();     
                              return;
                           }
                        }).show();   
           }
           return null;
       }

アラートダイアログを表示する方法は次のとおりです。

public void onClick(View v) {
   switch (v.getId()) {    
      //Here there are other cases too.
      case R.id.submit:
        getEditTexts();
        validator();
      break;
   }
}

public void validator() {              
    if(generator.receiveVal(0,0,sudo)) {
       showDialog(0);
     }
    else if(!generator.receiveVal(0,0,sudo)) {
       showDialog(1);
    }
}
4

2 に答える 2

3

.show()の代わりに.create()を置き換えてみてください。このようなあなたの場合:

case 1:
               return new AlertDialog.Builder(this)

               .setMessage("Failed")
               .setIcon(R.drawable.failure)
               .setPositiveButton("OK",
                       new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                            dialog.dismiss();

                          return;
                        }
                    }).create();   //Here replaced .show with .create()
于 2012-09-17T04:48:56.607 に答える
2

これは単なるアイデアですが、問題はonOrientationアクティビティを再描画しようとしていることのようです。

次のようなものを試してください。

これをマニフェストのアクティビティ宣言に追加できます。

android:configChanges="orientation"

のように見えます

<activity android:label="@string/app_name" 
    android:configChanges="orientation" 
    android:name=".your.package">

問題は、構成の変更が発生したときにシステムがアクティビティを破棄することです。を参照してくださいConfigurationChanges

したがって、それを構成ファイルに入れることで、システムがアクティビティを破壊することを回避できます。代わりに、メソッドを呼び出しますonConfigurationChanged(Configuration)

お役に立てれば。

于 2012-09-15T10:13:32.747 に答える