2016-11-08 3 views
0

Предположим, что такой сценарий имеет активность и 3 фрагмента, например: MyActivityFrg1, и Frg3. Frg2 и Frg3 встроены в viewPager. Мне нужно вызвать Frg2 от Frg1. Я сделал интерфейс TriggerActivityFromFrg1 и MyActivity реализует его, когда нажимает кнопку в Frg1 Я звоню (getActivity) triggerActivityFromFrg1.trigger(), а метод trigger() вызывается в MyActivity, проблема заключается в том, как вызвать Frg2 из активности?Как получить доступ к фрагменту зрителя из активности

Я хотел бы как-то создать интерфейс между MyActivity и Frg2.

p.s. Я не хочу использовать eventbus.

+0

является ViewPager помещен в различной активности? –

+0

viewPager в той же деятельности, я упомянул все компоненты в сценарии – Choletski

+0

, вы можете опубликовать свои файлы макета. –

ответ

1
  1. Иметь свой Frg2 класс также реализуют интерфейс:

    public class Frg2 extends Fragment implements TriggerActivityFromFrg1 { 
    

    и реализовать метод

    @Override 
        public void trigger() { 
         if (getView() != null) { // see comments below 
          // TODO logic here 
         } 
        } 
    
  2. Добавить поле для вашей деятельности, чтобы отслеживать целевой фрагмент :

    private TriggerActivityFromFrg1 mTarget; 
    
  3. Добавить регистровых/UNREGISTER методы деятельности:

    public synchronized void registerTriggerTarget(TriggerActivityFromFrg1 listener) { 
         mTarget = listener; 
        } 
    
        public synchronized void unregisterTriggerTarget(TriggerActivityFromFrg1 listener) { 
         if (mTarget == listener) { 
          mTarget = null; 
         } 
        } 
    
  4. Сделать метод запуска в вашей деятельности, как это:

    public void trigger() { 
         if (mTarget != null) { 
          mTarget.trigger(); 
         } 
        } 
    
  5. Override onAttach() и onDetach() в Frg2 зарегистрироваться/не зарегистрировано:

    @Override 
        public void onAttach(Activity activity) { 
         super.onAttach(activity); 
         ((MyActivity) activity).registerTriggerTarget(this); 
        } 
    
        @Override 
        public void onDetach() { 
         ((MyActivity) getActivity()).unregisterTriggerTarget(this); 
         super.onDetach(); 
        } 
    

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

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

Другое дело, иметь в виду, если расширение FragmentPagerAdapter является то, что фрагмент будет оставаться в памяти, даже если вид разрушен, поэтому убедитесь, что вы убедитесь, что этот фрагмент имеет действительный вид, т.е. if (getView() != null)

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