0

アプリケーションにアラートダイアログを表示したいのですが、メッセージが表示されるたびにメッセージが更新されます。これは、ダイアログボックスの値がアプリケーションの一部の値に依存しているためです。

今私はshowDialogメソッドを使おうとしました:

@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
    showDialog(RESULT_DIALOG);
    return false;
}

ただし、ダイアログが作成されると、メッセージは変更されません(ダイアログが作成された場合、開始されたバージョンが使用されることはわかっています)。

私のonCreateDialogメソッドコードは次のとおりです。

public Dialog onCreateDialog(int dialogId) {
    AlertDialog dialog;
    switch(dialogId) {
    case RESULT_DIALOG:
        // do the work to define the pause Dialog
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(localTv.getText())
               .setCancelable(false)
               .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                   }
               });                                 
        dialog = builder.create();
        break;
    default:
        dialog = null;
    }
    return dialog;
}

AlertDialogのコンテンツを更新する方法があります。実際、onTouchイベントが呼び出されるたびに新しいダイアログボックスを作成します。しかし、それがその問題を解決するための最もクリーンな方法であるかどうかはわかりません。

何か案が?ありがとう :)

4

2 に答える 2

6

onPrepareDialogメソッドを使用する必要があります。

@Override
protected void onPrepareDialog ( int id, Dialog dialog ) {
    switch ( id ) {
        case RESULT_DIALOG:
            AlertDialog alertDialog = ( AlertDialog ) dialog;
            alertDialog.setMessage( localTv.getText() );
            break;
    }
    super.onPrepareDialog( id, dialog );
}

http://developer.android.com/guide/topics/ui/dialogs.htmlから:

ダイアログが表示される前に、AndroidはオプションのコールバックメソッドonPrepareDialog(int、Dialog)も呼び出します。ダイアログを開くたびにダイアログのプロパティを変更する場合は、このメソッドを定義します。このメソッドは、ダイアログが開かれるたびに呼び出されますが、onCreateDialog(int)は、ダイアログが最初に開かれたときにのみ呼び出されます。onPrepareDialog()を定義しない場合、ダイアログは前回開いたときと同じままになります。このメソッドには、onCreateDialog()で作成したDialogオブジェクトとともに、ダイアログのIDも渡されます。

于 2011-11-04T10:27:53.277 に答える
2

onPrepareDialogを使用してダイアログをいつでも変更できます。または、ダイアログを削除して(したがって、常にonCreateDialogを通過します)、onDismiss(dialog.setOnDismiss)を設定してダイアログID(removeDialog(id))を削除できます。

于 2011-11-04T10:34:55.633 に答える