2016-08-15 3 views
0

У меня есть фрагмент диалога, который содержит список элементов. По умолчанию при касании элемента диалог отклоняется. Как я могу предотвратить увольнение в этот момент? (Я хочу, чтобы программно закрыть диалоговое окно на более позднем этапе)Диалоговое окно «Предотвращение», содержащее список при отклонении при выборе

Я следую пример кода, как указано здесь: https://developer.android.com/guide/topics/ui/dialogs.html

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setTitle(R.string.pick_color) 
      .setItems(R.array.colors_array, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
      } 
    }); 
    return builder.create(); 
} 

Я вижу, есть возможность использовать builder.setSingleChoiceItems вместо builder.setItems(), который даст мне поведение, которое я желаю, , но не стиль. (Поставляется с радио-кнопки, которые я не хочу)

+0

Не дубликат, я уже говорил, я пытался .setSingleChoiceItems, но это дает неправильный стиль. –

+0

Извинения. Пожалуйста, измените свой вопрос и заголовок, чтобы уточнить. Что-то вроде «Как установить стиль в диалоговом окне при использовании setSingleChoiceItems? Я удалю флаг дубликата. – tir38

ответ

0

Я думаю, вы должны использовать DialogFragment-х setItems, предоставляя элементы, но вместо того, чтобы обеспечить экземпляр onClickListener, просто обеспечить null. А именно:

.setItems(R.array.colors_array, null); 

Вы можете закрыть диалоговое окно по своему желанию.

+0

@ScottFerguson работает он? – Lino

+1

ну, он работает настолько, насколько диалог не отклоняется, но мне все еще нужно выполните действие над кликом элемента, поэтому установка onClickListener в значение null не является для меня вариантом. –

0

Установите слушатель на ListView после того, как диалог был создан, как это:

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    final AlertDialog dialog = builder.setTitle("My dialog") 
      .setItems(new String[]{"Do nothing...", "Dismiss!"}, null) // any listener will do! 
      .create(); 

    // add this listener after dialog creation to stop auto dismiss on selection 
    AdapterView.OnItemClickListener listener = new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      switch(position) { 
       case 0: 
        // do nothing selected 
        break; 
       case 1: 
        // dismiss selected 
        dialog.dismiss(); 
        break; 
      } 
     } 
    }; 
    dialog.getListView().setOnItemClickListener(listener); 
    return dialog; 
} 
Смежные вопросы