如何从活动

时间:2016-11-08 14:04:21

标签: android fragment

假设有这样一个场景,我们有一个活动和3个片段,如:MyActivity Frg1Frg2Frg3Frg2Frg3已嵌入到viewPager中。我的需求是从Frg2触发Frg1。我创建了一个界面TriggerActivityFromFrg1MyActivity实现了它,当我在Frg1中按下按钮时,我调用(getActivity) triggerActivityFromFrg1.trigger()并在trigger()中调用方法MyActivity,问题是如何从活动中触发Frg2

我想以某种方式建立MyActivity和Frg2之间的接口。

P.S。我不想使用eventbus。

1 个答案:

答案 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. 将注册/取消注册方法添加到活动:

        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. 覆盖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();
        }
    
  6. 恭喜,您刚刚建立了自己的迷你活动巴士。

    你必须添加所有这些代码是有原因的,因为ViewPager在需要之前不会创建片段。它还将MyActivityFrg2分开。

    如果扩展FragmentPagerAdapter,要记住的另一件事是,即使视图被破坏,片段也会保留在内存中,因此请确保检查片段是否具有有效视图,即if (getView() != null)