2011-02-03 1 views
2

私はAndroid 2.2アプリを開発しています。ホームキーを押してダイアログを2回表示してからアプリに戻ります

ダイアログを使用して、ニックネームをユーザーに尋ねます。これは私のソースコードです:

private void showDialog() { 
    //set up dialog 
    final Dialog dialog = new Dialog(UserStatsActivity.this); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    dialog.setContentView(R.layout.createuserrow); 
    dialog.setOnDismissListener(this); 

    //set up button 
    Button button = (Button) dialog.findViewById(R.id.saveUser); 
    button.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      TextView nameTextView = (TextView)dialog.findViewById(R.id.userName); 
      userNickName = nameTextView.getText().toString().trim(); 

      if ((userNickName.length() > 0) && 
       (userNickName.length() < 9)){ 
       saveUser = true; 
       dialog.dismiss(); 
      } 
     } 
    }); 
    //now that the dialog is set up, it's time to show it  
    dialog.show(); 
} 

public void onDismiss(DialogInterface arg0) { 
    try { 
     if (saveUser) { 
      SharedPreferences prefs = 
       PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
      User.saveUser(getApplicationContext(), userNickName); 
      Editor editor = prefs.edit(); 
      editor.putString(USER_NAME, userNickName); 
      editor.putBoolean(FIRST_TIME_RUN, false); 
      editor.commit(); 
      loadPreferences(); 
     } 
    } 
    catch (Exception ex){ 
     Log.e(Constants.APP_TAG, "UActivity: " + ex.getMessage()); 
     showAlert(this.getString(R.string.errorClose)); 
    } 
} 

ダイアログが表示されている間、私はホームキーを押します。もう一度アプリを起動して保存ボタンをクリックすると、ダイアログが再び表示されます。

私のコードをデバッグしましたが、それは完全に機能していますが、ダイアログはまだ開いています。

何が起こっているか

ありがとうございました。

答えて

3

私はメソッドonCreateDialog()とonPrepareDialog()を使用します。このようにすることで、ダイアログがいつ入力されて表示されるかをより詳細に制御できます。

onCreateDialog()は、ダイアログが最初に表示されたときに発生します。このメソッドはダイアログを設定するメソッドです。

onPrepareDialog()は、毎回表示される前に起動します。この方法は、その後の各オプションを変更する方法です。

@Override 
    protected Dialog onCreateDialog(int id) { 
    super.onCreateDialog(id); 
    final Dialog dialog = new Dialog(UserStatsActivity.this); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    dialog.setContentView(R.layout.createuserrow); 
    dialog.setOnDismissListener(this); 

    //set up button 
    Button button = (Button) dialog.findViewById(R.id.saveUser); 
    button.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      TextView nameTextView = (TextView)dialog.findViewById(R.id.userName); 
      userNickName = nameTextView.getText().toString().trim(); 

      if ((userNickName.length() > 0) && (userNickName.length() < 9)){ 
       saveUser = true; 
       dialog.dismiss(); 
      } 
     } 
    }); 
//now that the dialog is set up, it's time to show it 
return dialog; 
} 

これは、あなたのケースでは、onCreateDialog(int id)メソッドを使用する方法です。上記のことを覚えておいてください。他のダイアログを作成することはできませんでしたので、定数にIntを代入し、このメソッド内から決定する必要があります。

このメソッドが最初のダイアログと呼ばれることに注意してください。あなたは使用する必要があります。

@Override 
protected void onPrepareDialog(int id, Dialog dialog, Bundle args) { 
    super.onPrepareDialog(id, dialog, args); 
    if(id == DIALOG_DEFAULT) { 
     dialog.setTitle(mSettings.getString(getString(R.string.key_due_date), getString(R.string.unknown_task))); 
    ((AlertDialog)dialog).setMessage(mSettings.getString(getString(R.string.key_task), getString(R.string.unknown_task))); 
    } 
} 

は、後続の各ダイアログの再投入、またはあなたのonClickにremoveDialog(int DIALOG_ID);を追加します。

+0

どうすれば問題を解決できますか? – VansFannel

+0

それは動作します。私はonPrepareDialogを使う必要はありません。 – VansFannel

0

showDialog()で保存したユーザー名を確認しないでください。

+0

ユーザーがshowDialogメソッドで保存されているかどうかを確認すると、ダイアログはまだ開いています。 – VansFannel

+0

onPrepareDialog()の間にユーザー名が設定されていることを確認し、finish()を呼び出してアクティビティの表示を停止させることができます。また、showDialog()のif文をdialog.show()行のまわりで使用してください。 – AverageMarcus

関連する問題