andriod中adapter、activity、fragment之间如何相互通讯

andriod中adapter、activity、fragment之间如何相互通讯

andriod中adapter、activity、fragment之间如何相互通讯

adapter与fragment、activity通讯采用Handler

activity与fragment可以直接调用adapter实例的方法,那么adapter如何向activity与fragment传递消息呢?

在activi与fragment中添加一个Handler

    Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 0:
                    ((MainActivity)getActivity()).showguide("Focus");
            }
        }
    };

然后调用adaper的时候将mhandler传递过去,在adapter中打开

Adapter ad = new Adapter (mHandler);

Message message=Message.obtain(mhandler,0);
message.sendToTarget();


那么activity与fragment之间怎么通讯?

1、Activity使用Fragment中的方法

这个是比较简单的,首先,因为一般情况下Fragment是依附于Activity的,所以在Activity中可以先获取到Fragment的实例,然后就可以直接调用Fragment中的方法了。我们用代码来验证一下,先建一个MyFragment的类,然后在MyFragment中写一个方法:

public void toastShow() {
        Log.i("MyFragment", "来自activity的消息");
}

那么activity如何调用呢

fragment = new MyFragment();
fragment.toastShow();

2、Fragment使用Activity中的方法

在Fragment中也可以以类似的途径使用Activity的方法:先以getActivity的方式获取到Activity,然后就可以使用方法了(毕竟好基友,相互赠送礼物的方式比较像也是可以理解的嘛)。但是,这里有一个非常重要的东西要理解,那就是:Fragment中getActivity()获取到的对象不能直接用,必须要类型强转!!!(MainActivity)getActivity()这样才可以!

我们在MainActivity中写一个方法

public String getTestString() {
        return "成功执行activity中的方法";
}

然后在fragment中调用

String text1 = ((MainActivity)getActivity()).getTestString();

3、Activity响应Fragment中的点击事件
终于到了最激动人心,最基情满满的功能了。
我们试想下这样一种场景:在一个Fragment里面按下一个按钮,然后Activity中根据Fragment中传递过来的参数执行相应的方法。这样的场景其实是非常实用的,我们可以通过接口的方式来实现这样的功能。我们在MyFragment中定义这样的接口。

   public interface OnButton2ClickListener {
        public void OnButton2ClickListener(String showText);
    }

@Override
    public void onAttach(Activity activity) {
        // TODO Auto-generated method stub
        super.onAttach(activity);
        try {
            mListener = (OnButton2ClickListener) activity;
        } catch (Exception e) {
            // TODO: handle exception
            throw new ClassCastException(activity.toString() + "must implement OnButton2ClickListener");
        }
    }

如果MainActivity没有实现这个接口,MyFragment就会抛出ClassCastException,如果成功了,那么MyFragment就可以调用mListener的方法来与MainActivity共享事件。
OK,那我们接着在MyFragment中添加代码:

String showText = "我的点击事件";
mListener.OnButton2ClickListener(showText);

然后在MainActivity中实现接口OnButton2ClickListener

public class MainActivity extends Activity implements OnClickListener, 
        OnButton2ClickListener {

    ......
    @Override
    public void OnButton2ClickListener(String showText) {
        // TODO Auto-generated method stub
        TextView tv_activity = (TextView) findViewById(R.id.tv_activity);
        tv_activity.setText(showText);
    }
    ......
}


{{collectdata}}

网友评论0