9

非常にシンプルな AlertDialog を使用しています。テキスト ボックスを備えたカスタム ビューと、alertdialog の肯定的な送信ボタンです。ユーザーがダイアログを閉じる前に、テキスト ボックスにテキストが入力されていることを確認したいと思います。2 つの可能性があり、それぞれについて質問があります。

  • テキスト ボックスが空でなくなるまで、送信ボタンを無効にします (テキスト ボックスの onChange() タイプ ハンドラで)。
    • テキスト ボックスの内容が変更されたことをどのように知ることができますか?
    • AlertDialog のボタン オブジェクトへの参照を取得するにはどうすればよいですか?
  • 送信ボタンの onClick() をチェックインし、空の場合はダイアログの非表示をキャンセルします。
    • AlertDialogのボタンでこれを行うことは可能ですか? ダイアログは、dismiss() または cancel() を手動で呼び出さずに閉じるため、わかりません...

これらのオプションのいずれかが AlertDialog (対カスタム ダイアログ) で可能ですか?

2番目のオプションが最も簡単だと思いますが、可能であればどちらでも構いません。

4

3 に答える 3

4

私が考える最も簡単な方法は、xml ファイルで独自のダイアログを定義することです。次に、それを非常に簡単に表示できます (この例では、アクティビティ クラスのどこかに):

Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.your_dialog_file);

Button yourButton = dialog.findViewById(R.id.yourButton);
final EditText text = dialog.findViewById(R.id.yourTextEdit);
yourButton.setOnClickListener( {

public void onClick(View view) {
   if ( ! (text.getText().toString.equals(""))) {
        //go on here and dismiss dialog
   }

});
于 2010-05-09T21:30:22.157 に答える
1

入力が有効でない場合に、入力を検証し、アラート ダイアログを画面に表示し続ける方法を次に示します。実際には、ダイアログを削除して、その新しいコピーを作成します。

setPostiveButton の onClick 関数で、検証を行います。あるべき姿でない場合は、ユーザーにトーストを表示します。次に、ダイアログで removeDialog を呼び出します。次に、これはトリッキーな部分です。ダイアログで非同期に showDialog を呼び出します(該当する場合は引数を使用)。また、ユーザーの入力を失わないように、ユーザーが入力した値を、ダイアログを呼び出すバンドルに入れる必要があります。もちろん、ダイアログのセットアップ コードは、バンドル内のこれらの値を探して、ダイアログ フィールドに適切に事前設定する必要があります。

したがって、コードは次のようになります。

alert.setPositiveButton(id,
new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) 
    {
    if ((your validation conditions)) {
        // validation conditions not satisfied
        removeDialog(myDialogId);
        Toast.makeText(blah blah).show();
        // now create a new args bundle for the dialog
        Bundle newArgs = new Bundle();
        // now copy whatever you need from the args used to invoke to dialog
        newArgs.putIntegerArrayList("items", myList);
        // now save the user's input in a bundle
        newArgs.putString("dialogToFieldContent", toString);
        final Bundle finalArgs = newArgs;
        Handler handler = new Handler();
        handler.post(new Runnable() {
            @Override
            public void run() {
            showDialog(myDialogId, finalArgs);
            }
        });
    }
    else {
        // if everything is ok
    }
    }
});
于 2011-09-01T10:16:06.637 に答える