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();
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中的点击事件
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共享事件。
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); } ...... }
网友评论0