Fragment和Activity之间的通信(含接口回调)
2019-03-20 本文已影响0人
温一
一、Fragment和Activity的交互
1、在Fragment中调用Activity中的方法
Fragment可以通过getActivity()方法或者Context来获得Activity的实例,然后调用activity的方法
2、在Activity中调用Fragment中的方法:(要用到接口回调)
activity也可以获得一个fragment的引用,从而调用fragment中的方法。获得fragment的引用要用FragmentManager,之后可以调用findFragmentById() 或者 findFragmentByTag()。例如:
SubFragment fragment = (SubFragment ) getFragmentManager().findFragmentById(R.id.sub_fragment);
3、Fragment与Fragment之间的通信:
首先在一个Fragment中可以得到与它相关联的Activity,然后再通过这个Activity去获取另外一个Fragment的实例,这样就实现了不同Fragment之间的通信。
二、Fragment和Activity之间的通信,通过接口回调在Activity中获取Fragment中的值
一些情况下,可能需要fragment和activity共享事件,一个比较好的做法是在fragment里面定义一个回调接口,然后要求宿主activity实现这个接口。当activity通过这个接口接收到一个回调,它可以让同布局中的其他fragment分享这个信息。
A.java代码如下:
package com.cn.callback;
public class A {
public A() {
}
//下载图片的操作
public void loadfile(String image_path,final CallBack callBack) {
new Thread(new Runnable(){
public void run() {
// TODO Auto-generated method stub
String msg = "Hello, Im file";
callBack.getResult(msg);
}
}).start();
}
public interface CallBack {
public void getResult(String result);
}
}
新建B.java,代码如下:
package com.cn.callback;
import com.cn.callback.A.CallBack;
public class B {
public B(){
}
public static void main(String args[]) {
A a = new A();
a.loadfile("http://www.baidu.com/a.gif", new CallBack() {
public void getResult(String result) {
// TODO Auto-generated method stub
System.out.println(result);
}
});
}
}
最后程序运行的结果如下:Hello, Im file