1

Недавно я создал стандартный список DialogFragment, чтобы построить AlertDialog в моей деятельности, как можно видеть, как ответ здесь:Как я могу использовать свое оповещение DialogFragment для результата?

What is the best way to recreate an AlertDialog when the screen is rotated?

Теперь я хотел бы повторно использовать этот фрагмент для 3-х различных «Pop Up «списки выбора в моей деятельности. Для каждой из трех кнопок мне нужно идентифицировать вызывающую кнопку, чтобы определить, какое действие нужно предпринять, когда выбран элемент из списка.

Каков наилучший способ достичь этого?

В настоящее время я думаю, что мне нужно передать идентификатор вызывающей кнопки в DialogFragment, а затем передать его обратно в действие с результатом, когда диалог завершится. Есть ли лучший способ достичь этой цели?

ответ

0

Я думаю, что, возможно, самый простой способ добиться того, что вы собираетесь делать, - это просто иметь трех разных слушателей внутри вашего диалогового окна, а затем иметь сеттеры для каждого. Затем, когда вы создаете диалоговое окно оповещения в виде фрагмента, вы можете определить, что будет использовать метод onClick для каждого слушателя в вызывающем методе. Так что-то вроде этого:

protected DialogInterface.OnClickListener mListener1; 
protected DialogInterface.OnClickListener mListener2; 
protected DialogInterface.OnClickListener mListener3; 

public void setListener1(final YourDialogFragment.OnClickListener passedListener) { 
    mListener1 = new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      listener.onClick(getActivity(), dialog, which); 
     } 
    }; 
} 

Тогда внутри кода, который вызывает DialogFragment, называют что-то вроде:

// Building the Dialog Fragment here 

YourDialogFragment.setListener1(new YourDialogFragment.OnClickListener() { 
    @Override 
    public void onClick(FragmentActivity activity, DialogInterface dialog, int which) { 
     // Whatever you want to happen when you click goes here 
    } 
}); 

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

+0

Привет Уэс, я использую интерфейс как этого открытого интерфейса testDialogListener { public void onDialogClick (диалог диалога Dialog, int which); } –

+0

Должен ли я использовать DialogInterface.OnClickListener (ы), который вы указали (mListener1 и т. Д.), Вместо пользовательского, а затем реализовать встроенный метод onClick для каждого из них? –

+0

Когда я пытаюсь сделать, как указано выше, у меня есть проблемы с этим - окончательный файл YourDialogFragment.OnClickListener пройденListener. И я снова вернусь к созданию собственного интерфейса:/ –

0

Я бы рекомендовал вам, чтобы показать диалоговое фрагмент из другого фрагмента, где можно реализовать слушатель OnClick и использовать setTargetFragment() сказать диалоговый фрагмент, который он работает с ..

dialogFragment.setTargetFragment(this, 0); 

и использовать getTargetFragment() для получить родительский фрагмент из DialogFragment.

здесь некоторые фрагменты кода из примеров программ ..

 // Retrieve the progress bar from the target's view hierarchy. 
     mProgressBar = (ProgressBar)getTargetFragment().getView().findViewById(
       R.id.progress_horizontal); 

А также вы можете использовать setRetainInstance(true) в OnCreate() метод, чтобы сказать рамки, чтобы попытаться сохранить этот фрагмент вокруг во время изменений конфигурации

См this answer, чтобы получить больше идеи, надеюсь, что это помогает ..

Смежные вопросы