AlertDialog 上にダイアログを自動的に閉じないボタンを作成することはできますか?

StackOverflow https://stackoverflow.com/questions/2597371

  •  25-09-2019
  •  | 
  •  

質問

アラートダイアログにいくつかのチェックボックスを備えた単純なリストビューがあります。すべて選択/なしを追加するオプションを追加する必要がありますが、警告ダイアログでメニューを表示することはできないため、この機能をボタンから実行したいと考えています。私が見た限りでは、どの種類のボタン (肯定的、中立的、否定的) であっても、ダイアログはすべて閉じられます。

それで、これは可能でしょうか?「いいえ」の場合、どのような代替手段がありますか?最後の緩和策は、単純に新しいビューを作成してすべてを再作成することです。新しい見方です 最高 解決?

役に立ちましたか?

解決

それで、これは可能でしょうか?

標準のボタンではありません AlertDialog, 、 私の知る限り。

「いいえ」の場合、どのような代替手段がありますか?

ここにあるいくつかの:

  1. すべて選択/なしを選択しない
  2. 使用しないでください AlertDialog, ただし、ダイアログをテーマにしたアクティビティを使用します。
  3. 使用しないでください AlertDialog, ただし、他のサブクラスを使用します。 Dialog
  4. 引用されたオプション (使用しないでください) setAdapter(), 、むしろ独自のものを作成してください View ダイアログの内容について)
  5. は使用しないでください Dialog 全然、でも ListActivity 経由で開始 startActivityForResult() (テーマを気にせずに、#2 に似ています)

他のヒント

ボタンのonclicklistenerを超える必要があります。たとえば、ニュートラルボタンの場合、次のようなものがあります。

AlertDialog dialog = builder.create();
dialog.setButton(AlertDialog.BUTTON_NEUTRAL, "Neutral", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    } 
});
dialog.setButton(AlertDialog.BUTTON_POSITIVE, "Positive", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
    } 
});
dialog.show();

Button neutralButton = dialog.getButton(DialogInterface.BUTTON_NEUTRAL);
neutralButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View onClick) {                 
        /**
        *
        * your code
        * 
        */

    }
});

それで、これは可能ですか?

次の方法を使用して、alertdialogにカスタムビューを配置することができます。

android.app.AlertDialog.Builder.setView(View view)

そのビューにはボタンを含めることができます。リストビューで動作するボタンにOnClickListenerを取り付けるだけです。

alertdialogクラスを拡張して、clicklistenerをinclicklistenerにしようとしましたか

public class MyDialog extends AlertDialog implements OnClickListener {
    private Button myButton;

    public void onCreate( Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );
        // use LayoutInflater to get at custom button
        LayoutInflater layoutInflater = (LayoutInflater)getContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE );
        View contentView = layoutInflater.inflate( R.layout.mydialog_layout, null );

        // pull button from layout, set listener
        myButton = (Button)contentView.findViewById( R.id.myButtonId );
        myButton.setOnClickListener( this );

        setContentView( contentView );
    }

    public void onClick( View v ) {
        if ( v.getId() == R.id.myButtonId ) {
            // DO your button actions.
        }
    }
}

このテンプレートに従って、必要なボタンを配置して、ダイアログ自体内で独自の機能を作成できます。実行時に独自のボタンを作成することもできますが、ボタンのテキスト、サイズ、アイコンなどを構成する追加作業を行う必要があります。

その後、oncreatedialog()呼び出しの下でアクティビティにダイアログを作成できます。

protected Dialog onCreateDialog( int id ) {
    MyDialog dialog = new MyDialog( this, 0 );
    dialog.setOnCancelListener( this );
    dialog.setOnDismissListener( this );
    return dialog;
}

お役に立てれば。

可能です。解決策はです

  1. オーバーライドします dismiss 方法 何もしない. 。これにより、ボタンのいずれかがクリックされたときにダイアログが却下されるのを防ぎます。オプションでは、できることもあります 保存 元の却下。

  2. OnClickListenerを変更して、それが呼び出すように変更します スーパークラス あなたのダイアログの(すなわち alertdialog) 's disciss()(すなわち super.dismiss())必要なボタンがクリックされたとき。

私は通常、ダイアログクラスをリスナーにしますので、このようなことをします

public class MyAlertDialog extends AlertDialog implements OnClickListener {

    // other methods
    @Override
    public void dismiss() {

    }

    // superclass's dismiss, might come in handy when the OnClickListener is not this dialog
    public void normalDismiss() {
        super.dismiss();
    }

    public void onClick(DialogInterface dialog, int which) {
        switch (which) {
        case BUTTON_NEGATIVE:
            // handle your event
            super.dismiss();
            break;
        case BUTTON_NEUTRAL:
            // handle your event
            break;
        case BUTTON_POSITIVE:
        default:
            // handle your event
            super.dismiss();
            break;
        }
    }

}

ボタンがネガまたはポジティブがクリックされた場合にのみダイアログを却下するようにしますが、ボタンがニュートラルの場合はダイアログを表示します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top