Android - 使用Anonymous类进行片段交互

时间:2016-01-02 20:37:12

标签: android android-fragments android-fragmentactivity

我有一个包含7个片段的活动A.对于片段到活动和片段到片段之间的通信,My活动明确地声明了所有7个片段的Fagment接口。 语法就像

class A extends Activity implements B.onInteraction, C.onInteraction, D.OnInteration .... {
}

这变得很长,我不喜欢明确地将其声明在活动之上。 我能想到的另一个解决方案是在每个片段中定义一个方法setOnInteractionListener(),并将匿名类传递给它。就像。

class B extends Fragment {
   public void setOnFragmentInteractionListener(OnFragmentInteraction listener) {
   }
}

通过这种方式,我不需要覆盖片段的onAttach(),我不需要在顶部声明片段接口。

我的问题是:这是一种很好的做事方式吗?在这里使用匿名类有什么缺点。有没有更好的方法来做到这一点,或者我应该坚持在创建活动时明确声明界面。

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解这个问题因为我是初学者。我的意见可以为你的所有片段创建一个界面:

  public interface ActivityListener {
        void onCall(Fragment fragment);
    }

您的活动:

   public class MainActivity extends AppCompatActivity implements ActivityListener {
      @Override
        public void onCall(Fragment fragment) {
            switch (fragment.getTag()) {
                case YOUR_TAG:
                    Log.d("listener", "called");
                    break;
            }
        }
    }

在你的片段中使用onAttach()方法获取接口。

答案 1 :(得分:0)

我更喜欢使用EventBus(特别是https://github.com/greenrobot/EventBus,有人更喜欢http://square.github.io/otto/)来在Fragments和Activity之间进行通信。

您需要注册(和取消注册)侦听器(例如,活动或其他片段)并使用onEvent(<CustomEventclass> event);

创建方法
EventBus.getDefault().register(this); //and unregister

只需从片段中发布事件,如

EventBus.getDefault().post(<CustomEventClass> instance); 

制作BaseFragment并传递监听器也是一种常规方式。这只是开发人员的选择。