AlertDialog 上にダイアログを自動的に閉じないボタンを作成することはできますか?
-
25-09-2019 - |
質問
アラートダイアログにいくつかのチェックボックスを備えた単純なリストビューがあります。すべて選択/なしを追加するオプションを追加する必要がありますが、警告ダイアログでメニューを表示することはできないため、この機能をボタンから実行したいと考えています。私が見た限りでは、どの種類のボタン (肯定的、中立的、否定的) であっても、ダイアログはすべて閉じられます。
それで、これは可能でしょうか?「いいえ」の場合、どのような代替手段がありますか?最後の緩和策は、単純に新しいビューを作成してすべてを再作成することです。新しい見方です 最高 解決?
解決
それで、これは可能でしょうか?
標準のボタンではありません AlertDialog
, 、 私の知る限り。
「いいえ」の場合、どのような代替手段がありますか?
ここにあるいくつかの:
- すべて選択/なしを選択しない
- 使用しないでください
AlertDialog
, ただし、ダイアログをテーマにしたアクティビティを使用します。 - 使用しないでください
AlertDialog
, ただし、他のサブクラスを使用します。Dialog
- 引用されたオプション (使用しないでください)
setAdapter()
, 、むしろ独自のものを作成してくださいView
ダイアログの内容について) - は使用しないでください
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;
}
お役に立てれば。
可能です。解決策はです
オーバーライドします
dismiss
方法 何もしない. 。これにより、ボタンのいずれかがクリックされたときにダイアログが却下されるのを防ぎます。オプションでは、できることもあります 保存 元の却下。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; } } }
ボタンがネガまたはポジティブがクリックされた場合にのみダイアログを却下するようにしますが、ボタンがニュートラルの場合はダイアログを表示します。