3

アラートダイアログにいくつかのチェックボックスがある単純なリストビューがあります。[すべて選択/なし]を追加するオプションが必要ですが、アラートダイアログでメニューを表示できないため、ボタンからこの機能を実行したいと思います。私が見たものから、あらゆる種類のボタン(ポジティブ、ニュートラル、ネガティブ)はすべて、関係なくダイアログを閉じます。

それで、これは可能ですか?いいえの場合、どのような選択肢がありますか?私の最後の緩和策は、単に新しいビューを作成し、すべてを再作成することです。新しいビューが最善の解決策ですか?

4

5 に答える 5

6

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

AlertDialogAFAIKの標準ボタンからではありません。

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

ここにあるいくつかの:

  1. 提供しない すべて選択/なし
  2. を使用せずAlertDialog、ダイアログをテーマにしたアクティビティを使用する
  3. を使用しないAlertDialogで、 の他のサブクラスを使用してくださいDialog
  4. 引用したオプション (を使用しないでください。ダイアログの内容setAdapter()に独自のオプションを作成してください)View
  5. Dialogaはまったく使用しないで、a を使用してListActivity開始しますstartActivityForResult()(#2 に似ていますが、テーマを気にする必要はありません)。
于 2010-04-08T04:17:31.293 に答える
5

ボタンの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
        * 
        */

    }
});
于 2012-08-27T09:12:52.343 に答える
0

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

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

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

そのビューにはボタンを含めることができます。リストビューで動作するボタンにonClickListenerをアタッチするだけです。

于 2010-04-08T18:48:58.477 に答える
0

可能です。解決策は

  1. dismissメソッドをオーバーライドして何もしないようにします。これにより、いずれかのボタンがクリックされたときにダイアログが閉じられなくなります。必要に応じて、元の却下を保存することもできます。

  2. OnClickListener を変更して、必要なボタンがクリックされたときにダイアログのスーパークラス(つまりAlertDialog ) の Dismiss() (つまりsuper.dismiss()) を呼び出すようにします。

私は通常Dialogクラスをリスナーにするので、このようなことをします

public class MyAlertDialog extends AlertDialog implement OnClickListener {

    // その他のメソッド
    @オーバーライド
    パブリック無効却下(){

    }

    // スーパークラスの却下。OnClickListener がこのダイアログでない場合に役立つ場合があります
    public void normalDismiss() {
        super.dismiss();
    }

    public void onClick(DialogInterface dialog, int which) {
        スイッチ (どの) {
        ケース BUTTON_NEGATIVE:
            // イベントを処理します
            super.dismiss();
            壊す;
        ケース BUTTON_NEUTRAL:
            // イベントを処理します
            壊す;
        ケース BUTTON_POSITIVE:
        デフォルト:
            // イベントを処理します
            super.dismiss();
            壊す;
        }
    }

}

ボタン NEGATIVE または POSITIVE がクリックされたときにのみダイアログを閉じ、ボタン NEUTRAL がクリックされたときにダイアログを表示し続けるようにします。

于 2012-10-10T04:30:34.180 に答える
0

AlertDialog クラスを拡張して、OnClickListener を実装しようとしましたか?

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;
}

お役に立てれば。

于 2011-05-17T06:57:54.513 に答える