美文网首页
Fragment的交互

Fragment的交互

作者: zyyoona7 | 来源:发表于2016-05-19 10:10 被阅读1064次

    最近项目以单个Activity+Fragment来完成,Fragment的各种用法是略不过的,上篇已经推荐了一个Fragment管理的开源库Fragmentation,这次在项目的新版中用到了,还是非常好用的。今天主要记录一下Fragment的交互方式。

    Fragment与Activity之间的交互

    Often you will want one Fragment to communicate with another, for example to change the content based on a user event. All Fragment-to-Fragment communication is done through the associated Activity. Two Fragments should never communicate directly.
    谷歌官方教程的一段话,大致意思就是:所有的fragment与fragment之间的交互都需要通过宿主activity来实现,fragment与fragment不应该直接交互。

    Fragment与activity之间的交互有以下几种方式:

    1.通过getActivity()强转直接调用方法

    这种方法比较简单粗暴,直接通过在Fragment的onAttach(Context context)强转成宿主activity的类型,然后在需要调用的时候直接调用((AssociatedActivity)getActivity).someMethod()
    这种方式能达到要求,但是发没发现耦合度太高了?大家都知道Fragment的出现是为了复用和适配大屏幕。如果这个Fragment在别的功能也使用了,当宿主Activity变化的时候就不是我们想要的了。当然我们可以在onAttach()方法中判断,不过这样显然不妥。

    2.同过定义Interface与Activity交互

    这种方式是官方示例的写法,我也比较倾向这种写法。
    首先定义一个接口(interface),然后在onAttach()方法中去绑定。

    if (context instanceof OnFragmentInteractionListener) { 
         mListener = (OnFragmentInteractionListener) context;
    } else {    
         throw new RuntimeException(context.toString()+ " must implement OnFragmentInteractionListener");
    }```
    OnFragmentIntercationListener是你自己定义的接口。绑定完就可以在你需要的地方调用了。比如:
    ```java
    @Override
    public void onClick(View v) { 
       switch (v.getId()){    
        case R.id.btn_interface_two: 
           mListener.onFragmentInteraction(2); 
               break;  
      }}
    

    这是在点击按钮的时候调用了interface的方法,以上是Fragment部分的代码。下面是Activity中的代码:
    首先Activity要实现定义的接口,即本例中的OnFragmentInteractionListener,然后实现接口中的方法。

    @Override
    public void onFragmentInteraction(int position) {    
        //do something
    }
    

    这样就可以调用了,还是挺简单的吧~

    3.EventBus

    这种就不多说了~不会用有点说不过去。

    4.FABridge

    这个是鸿洋大神的开源库,请移步至FABridge,这个用起来相当简单,简化了许多代码。

    父Fragment与子Fragment交互

    看了上面了我相信这个问题也没什么难度了。可以和上面的方式类似

    ViewPager+Fragment连用时操作Fragment问题

    这里传送门Update_Replace_Fragment_In_ViewPager

    相关文章

      网友评论

          本文标题:Fragment的交互

          本文链接:https://www.haomeiwen.com/subject/sqxgrttx.html