Загружать фрагмент за диалогом ANDROID

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

  builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // Do something when click positive button
                    for (int i = 0; i<chekedniveles.length; i++){
                        boolean checked = chekedniveles[i];
                        if (checked) {

                            System.out.println(nivelesList.get(i) + "\n");

                        }
                    }

Я думаю, что, чтобы обновлять фрагмент, он должен идти внутри кнопки ok listener, но бросает в меня ошибку.

4
задан 14.07.2017, 03:11
3 ответа

Ввиду того, что отец диалога - фрагмент, ты не можешь менять фрагмент с этого диалога. FragmentManager принадлежи в Activity. Фрагмент не может (даже не должны) перемещать самого себя. Так как активность - тот, кто знает и управляет всеми фрагментами, включенный он сам.

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

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

Например, во фрагменте:

public class MiFragmento extends Fragment {
OnDestruir mCallback;

// La actividad padre debe implementar esta interfaz
public interface OnDestruir {
    public void onDestruirFragmento(Fragment miFragmento);
    // Puedes agregar más si necesitas
}
// El resto del código
}

В Handler кнопки:

@Override
public void onClick(DialogInterface dialog, int which) {
    // Mucho código por aquí
    Fragment.this.mCallback.onDestruirFragmento(this);
    }

И в активности:

public static class MiActividad extends Activity implements MiFragmento.OnDestruir{
    // Mucho más código por acá

    // Esta es la implementación de la interfaz.
    public void onDestruir(Fragment quien) {
    /* 
     * Aquí ya puedes acceder a FragmentManager, destruir 'quien'
     * y reemplazarlo por otro, o lo que necesites.
     */
    }
}

Ты должен уверять, что активность осуществляет интерфейс. У документации Андроид Девелоперс на английском есть больше информации по этому поводу.

2
ответ дан 24.11.2019, 13:52

Никогда я не пробовал делать это, но удалось сообщить DialogFragment с activity очень удовлетворительного способа посредством одной интерфейс. Ты можешь пытаться с этим вариантом видеть. Привет

0
ответ дан 24.11.2019, 13:52
  • 1
    Привет Габриэль я podr и # 237; схвати говорить точно, которое ты имеешь в виду, спасибо! – Marcos Esteve 09.07.2016, 20:43

На основании твоего комментария, ты хочешь, чтобы, дав клик в кнопке, он изменил фрагмент...

Ты можешь реализовывать это посредством сделки фрагментов, изменив в другой фрагмент диалог, он закрывается, так как фрагмент, который это открыл изначально, прекратил существовать.

 builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // Do something when click positive button
                    for (int i = 0; i<chekedniveles.length; i++){
                        boolean checked = chekedniveles[i];
                        if (checked) {

                            System.out.println(nivelesList.get(i) + "\n");

                        }
                    }

                  // Crea el nuevo fragmento y la transacción.
                  Fragment nuevoFragmento = new myFragment();
                  FragmentTransaction transaction = getFragmentManager().beginTransaction();

                  transaction.replace(R.id.fragment_container, nuevoFragmento);
                  transaction.addToBackStack(null);

                  // Commit a la transacción
                  transaction.commit();

                 }
0
ответ дан 24.11.2019, 13:52
  • 1
    после того, как - внутри фрагмента он не позволяет мне использовать getFragmentManager (), ты знаешь, как я могу решать это? Спасибо! – Marcos Esteve 10.07.2016, 10:02

Теги

Похожие вопросы