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

上一篇下一篇

猜你喜欢

热点阅读