Как избежать скрытия (или отклонения) AlertDialog при нажатии на кнопку NeutralButton? - PullRequest
3 голосов
/ 22 июня 2010

Я пытаюсь использовать диалоговое окно с несколькими вариантами выбора, как показано ниже. И я хочу использовать нейтральную кнопку, чтобы отменить выбор всех элементов в списке. Но при нажатии кнопки в зависимости от того, что диалоговое окно, диалоговое окно немедленно исчезает, я предполагаю, что это должно быть действие по умолчанию. Но я хочу остаться, потому что пользователь не ожидает этого действия, я думаю. Можно ли избежать исчезновения диалогового окна при нажатии на него кнопки или мне следует создать собственное диалоговое окно?

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

Заранее спасибо, йокё

Ответы [ 3 ]

3 голосов
/ 22 июня 2010

Если вы добавляете кнопку с помощью любого из этих методов setButton, диалог будет закрываться после запуска обработчика.Итак, у вас есть два варианта.Создайте свой собственный диалог и сделайте так, чтобы кнопка работала так, как вы хотите.Или два: поскольку вы используете список, вы можете вызывать getListView в AlertDialog и вызывать addFooterView с помощью кнопки.Это решение может выглядеть странно с другими кнопками.

3 голосов
/ 23 июня 2010

Я добился выбора / отмены выбора всех пунктов следующим способом. Идея исходит из совета Рпонда, спасибо Рпонду!

- /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 голосов
/ 22 июня 2010

Возможно, вам лучше создать собственный диалог. Вы можете использовать любое задание и просто установить тему для задания на Theme.Dialog. Т.е. в вашем манифесте:

<activity android:theme="@android:style/Theme.Dialog">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...