我正在尝试使用多重可选对话框作为下面的代码。我想使用中性按钮取消选择列表中的所有项目。但是当单击对话框中的任何一个按钮时,对话框立即消失,我认为它必须是默认动作。但我希望保留它,因为用户不希望我认为这样做。是否可以避免在单击对话框时消失对话框,或者我应该创建自定义对话框?
protected Dialog onCreateDialog( int index)
{
return new AlertDialog.Builder(this)
.setTitle( "title" )
.setMultiChoiceItems(items, selections, new DialogInterface.OnMultiChoiceClickListener(){
@Override
public void onClick( DialogInterface dialog, int clicked, boolean selected ) { }
})
.setPositiveButton( "OK", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int id)
{
//Do something
}
})
.setNeutralButton( "Deselect all", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int id)
{
//Do something
}
})
.create();
}
先谢谢,yokyo
答案 0 :(得分:3)
如果使用任何setButton方法添加按钮,对话框将在处理程序运行后解除。所以你有两个选择。创建自己的对话框,然后让按钮工作。或者两个,因为您正在使用列表,所以您可以在AlertDialog上调用getListView并使用Button调用addFooterView。使用其他按钮可能看起来很奇怪。
答案 1 :(得分:3)
我通过以下方法实现了选择/取消选择所有项目。这个想法来自Rpond的建议,谢谢Rpond!
- /res/layout/dialog_footer.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/footerRoot"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button android:id="@+id/selectAllButton"
android:text="@string/select_all"
style="@style/FooterButton" />
</LinearLayout>
- 此处代码
protected Dialog onCreateDialog( int index)
{
AlertDialog builder= new AlertDialog.Builder(this)
.setTitle( "title" )
.setMultiChoiceItems(items, selections, new DialogInterface.OnMultiChoiceClickListener(){
@Override
public void onClick( DialogInterface dialog, int clicked, boolean selected ) { }
})
.create();
LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.dialog_footer, (ViewGroup)findViewById(R.id.footerRoot));
Button selectAllButton = (Button)layout.findViewById(R.id.selectAllButton);
selectAllButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
Log.v("Test", "hello");
}
});
builder.setView(layout);
return builder;
}
它正是我想要的。 yokyo
答案 2 :(得分:2)
您最好创建自定义对话框。您可以使用任何活动,只需将活动的主题设置为Theme.Dialog。即,在你的清单中:
<activity android:theme="@android:style/Theme.Dialog">