单击NeutralButton时,如何避免隐藏(或解除)AlertDialog?

时间:2010-06-22 17:02:52

标签: android

我正在尝试使用多重可选对话框作为下面的代码。我想使用中性按钮取消选择列表中的所有项目。但是当单击对话框中的任何一个按钮时,对话框立即消失,我认为它必须是默认动作。但我希望保留它,因为用户不希望我认为这样做。是否可以避免在单击对话框时消失对话框,或者我应该创建自定义对话框?

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

3 个答案:

答案 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">