• Fragment与Fragment、Activity通信的四种方式II

    发布:51Code 时间: 2017-09-20 10:31

  • 2.使用接口 接口可以实现两个Fragment之间的通信,也可以实现Fragment和Activity之间的通信,这大概是用的比较多的一种方式,也是个人比较推荐的一种方式,使用接口来实现两个Fragment之间...

  • 2.使用接口

           接口可以实现两个Fragment之间的通信,也可以实现Fragment和Activity之间的通信,这大概是用的比较多的一种方式,也是个人比较推荐的一种方式,使用接口来实现两个Fragment之间通信,要通过宿主Activity中转一下,如果是Fragment和宿主Activity通信则直接调用即可。首先在左边的Fragment中定义一个接口:

    public interface showPro {  
        public void showProByName(String name);  
    }  

           然后定义一个接口变量:

    private showPro mCallback;  

           我们要在宿主Activity中实现这个接口,这样当Fragment调用onAttach方法时我们就可以实例化这个接口了:

    @Override  
    public void onAttach(Activity activity) {  
        super.onAttach(activity);  
        if (activity != null) {  
            mCallback = (showPro) activity;  
        }  
    }  

           当mCallback实例化之后,那么我们在点击列表中的某一项的时候就可以调用这里边的showProByName方法了:

     lv.setOnItemClickListener(new OnItemClickListener() {  
        @Override  
        public void onItemClick(AdapterView<?> parent, View view,  
                int position, long id) {  
            TextView nameTV = (TextView) view;  
            String name = nameTV.getText().toString();  
            if ("**".equals(name)) {  
                mCallback.showProByName(name);  
            }  
        }  
    });  

           当然,这个方法的具体实现在宿主Activity中,当宿主Activity实现了showPro接口之后,接着就要实现它里边的方法了:

    public class MainActivity extends Activity implements showPro {  
        private ContentFragment cf;  
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
            getActionBar().hide();  
            cf = (ContentFragment) getFragmentManager().findFragmentById(  
                    R.id.content_fg);  
        }  
      
        @Override  
        public void showProByName(String name) {  
            cf.showPro(name);  
        }  
    }  

           我们在接口的方法中调用右边Fragment中的showPro方法,并将当前人名作为参数传入,这个方法与1中相同,我就不贴代码了。这个方法与1中介绍的方法相比,虽然有点麻烦,但是可以有效的解决在一个Fragment中拿不到另一个Fragment实例的问题,具体应用场景就是ViewPager中的Fragment之间通信。

  • 上一篇:Fragment与Fragment、Activity通信的四种方式I

    下一篇:AIDL的全称是什么?如何工作?

网站导航
Copyright(C)51Code软件开发网 2003-2015 , 沪ICP备05003035号