Fragment与Fragment、Activity通信的四种方式(二)

2.使用接口

接口可以实现两个Fragment之间的通信,也可以实现FragmentActivity之间的通信,这大概是用的比较多的一种方式,也是个人比较推荐的一种方式,使用接口来实现两个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之间通信。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容