activity与fragment通信汇总

来源:互联网 发布:剑灵女帝捏脸数据 编辑:程序博客网 时间:2024/05/17 04:56

先看效果:蓝色区域为activity,红色为leftfragment,绿色为rightfragment。

1,activity向fragment传递消息:

 在activity中:

Bundle bundle=new Bundle();bundle.putString("msg", "收到activity发送来的消息");rightfragment.setArguments(bundle);

也就是通过fragment的setArgument()方法传递一个Bundle类型的数据

在fragment中:

//接收来自activity的消息并显示        tvFromactivity=(TextView) getActivity().findViewById(R.id.tv_fromactivity);Bundle bundle=getArguments();    String str=bundle.getString("msg");    tvFromactivity.setText(str);

通过getArgument()方法获取activity传递过来的数据。

注意的是这种传递方式好像类似于Intent,只有在fragment还未显示也就是创建fragment的时候才可以用这种方式传递。

2,fragment向activity传递消息:

leftfragment中:

    ..........//leftfragment通知activity的回调接口public interface Mylistener{public void showMessage(int index);}private Mylistener mlistener;        .......              btFirst=(Button) getActivity().findViewById(R.id.bt_first);        btSecond=(Button) getActivity().findViewById(R.id.bt_second);        btThird=(Button) getActivity().findViewById(R.id.bt_fourth);        btsendtoright=(Button) getActivity().findViewById(R.id.bt_sendtoright);                MybuttonClickListener listener=new MybuttonClickListener();        btFirst.setOnClickListener(listener);        btSecond.setOnClickListener(listener);        btThird.setOnClickListener(listener);           .......             class MybuttonClickListener implements OnClickListener{        @Override        public void onClick(View v) {            Button button=(Button) v;            if(button==btFirst){                //调用回调接口的方法                mlistener.showMessage(1);            }            if(button==btSecond){                mlistener.showMessage(2);            }            if(button==btThird){                mlistener.showMessage(3);            }        }              }
activity中:

在activity中实现接口响应回调方法

//实现接口响应回调方法@Overridepublic void showMessage(int index) {if(index==1){tvMessage.setText("这是第一页 这是第一页 这是第一页 这是第一页");}if(index==2){tvMessage.setText("这是第二页 这是第二页 这是第二页 这是第二页");}if(index==3){tvMessage.setText("这是第三页 这是第三页 这是第三页 这是第三页");}}

3,fragment向fragment传递消息:

fragment向fragment传递消息只能通过activity间接传递,也就是leftfragment先把消息传递给activity,然后再有activity传递给rightfragment

activity中:

 //leftfragment通知rightfragment的回调接口   public interface Mycallback{   public void callback(String str);   }.....             LeftFragment leftfragment=new LeftFragment();        final RightFragment rightfragment=new RightFragment();        transaction.add(R.id.left_layout, leftfragment, "leftfragment");        transaction.add(R.id.right_layout, rightfragment,"rightfragment");        //transaction.commit();        //往leftfragment中设置回调接口,便于从leftfragment得到传递给activity的消息        leftfragment.setcallback(new Mycallback() {            @Override            public void callback(String str) {                //把从leftfragment得到的消息传递给rightfragment让其显示                rightfragment.showfromleft(str);            }        });
leftfragment中:

        ......       Mycallback mcallback=null;public void setcallback(Mycallback call){mcallback=call;}        .....       btsendtoright.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                mcallback.callback("接收到来自leftfragment的消息");            }        });
rightfragment中:

   public void showfromleft(String str){      tvFromactivity.setText(str);      }      

最后附上完整代码:

package com.app.activityandfragment;import com.app.activityandfragment.MainActivity.Mycallback;import android.content.Context;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;public class LeftFragment extends Fragment{//leftfragment通知activity的回调接口public interface Mylistener{public void showMessage(int index);}private Mylistener mlistener;private Button btFirst,btSecond,btThird,btsendtoright;Mycallback mcallback=null;public void setcallback(Mycallback call){mcallback=call;}@Overridepublic void onAttach(Context context) {super.onAttach(context);mlistener=(Mylistener) context;}     @Override    public void onCreate(Bundle savedInstanceState) {    // TODO Auto-generated method stub    super.onCreate(savedInstanceState);    }          @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,    Bundle savedInstanceState) {    // TODO Auto-generated method stub    return inflater.inflate(R.layout.leftfragment,container, false);    }          @Override    public void onActivityCreated(Bundle savedInstanceState) {    // TODO Auto-generated method stub    super.onActivityCreated(savedInstanceState);    }          @Override    public void onStart() {    // TODO Auto-generated method stub    super.onStart();    }          @Override    public void onResume() {    super.onResume();    btFirst=(Button) getActivity().findViewById(R.id.bt_first);    btSecond=(Button) getActivity().findViewById(R.id.bt_second);    btThird=(Button) getActivity().findViewById(R.id.bt_fourth);    btsendtoright=(Button) getActivity().findViewById(R.id.bt_sendtoright);        MybuttonClickListener listener=new MybuttonClickListener();    btFirst.setOnClickListener(listener);    btSecond.setOnClickListener(listener);    btThird.setOnClickListener(listener);        btsendtoright.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mcallback.callback("接收到来自leftfragment的消息");}});    }          class MybuttonClickListener implements OnClickListener{@Overridepublic void onClick(View v) {Button button=(Button) v;if(button==btFirst){//调用回调接口的方法mlistener.showMessage(1);}if(button==btSecond){mlistener.showMessage(2);}if(button==btThird){mlistener.showMessage(3);}}          }}

</pre><pre name="code" class="html">package com.app.activityandfragment;import android.content.Context;import android.os.Bundle;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import android.widget.TextView;public class RightFragment extends Fragment{private TextView tvFromactivity;   @Overridepublic void onAttach(Context context) {// TODO Auto-generated method stubsuper.onAttach(context);}     @Override    public void onCreate(Bundle savedInstanceState) {    // TODO Auto-generated method stub    super.onCreate(savedInstanceState);    }          @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,    Bundle savedInstanceState) {    // TODO Auto-generated method stub     // View view=View.inflate(getActivity(), R.layout.rightfragment, null);    return inflater.inflate(R.layout.rightfragment,container,false);     // tvFromactivity=(TextView) view.findViewById(R.id.tv_fromactivity);      // return view;    }                public void showfromleft(String str){      tvFromactivity.setText(str);      }           @Override    public void onActivityCreated(Bundle savedInstanceState) {    // TODO Auto-generated method stub    super.onActivityCreated(savedInstanceState);    }          @Override    public void onStart() {    // TODO Auto-generated method stub    super.onStart();    }          @Override    public void onResume() {    // TODO Auto-generated method stub    super.onResume();    //接收来自activity的消息并显示        tvFromactivity=(TextView) getActivity().findViewById(R.id.tv_fromactivity);Bundle bundle=getArguments();    String str=bundle.getString("msg");    tvFromactivity.setText(str);    }}

package com.app.activityandfragment;import android.os.Bundle;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import com.app.activityandfragment.LeftFragment.Mylistener;public class MainActivity extends FragmentActivity implements Mylistener{   private TextView tvMessage,tvFromfragment;   private Button btSendTofragment;      //leftfragment通知rightfragment的回调接口   public interface Mycallback{   public void callback(String str);   }   @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btSendTofragment=(Button) findViewById(R.id.bt_sendtofragment);tvFromfragment=(TextView) findViewById(R.id.tv_fromfragment);tvMessage=(TextView) findViewById(R.id.tv_fromfragment);FragmentManager manager=getSupportFragmentManager();final FragmentTransaction transaction=manager.beginTransaction(); LeftFragment leftfragment=new LeftFragment();final RightFragment rightfragment=new RightFragment();transaction.add(R.id.left_layout, leftfragment, "leftfragment");transaction.add(R.id.right_layout, rightfragment,"rightfragment");//transaction.commit();//往leftfragment中设置回调接口,便于从leftfragment得到传递给activity的消息leftfragment.setcallback(new Mycallback() {@Overridepublic void callback(String str) {//把从leftfragment得到的消息传递给rightfragment让其显示rightfragment.showfromleft(str);}});btSendTofragment.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Bundle bundle=new Bundle();bundle.putString("msg", "收到activity发送来的消息");rightfragment.setArguments(bundle);transaction.commit();}});}  //实现接口响应回调方法@Overridepublic void showMessage(int index) {if(index==1){tvMessage.setText("这是第一页 这是第一页 这是第一页 这是第一页");}if(index==2){tvMessage.setText("这是第二页 这是第二页 这是第二页 这是第二页");}if(index==3){tvMessage.setText("这是第三页 这是第三页 这是第三页 这是第三页");}}   @Overrideprotected void onResume() {super.onResume();//tvMessage=(TextView) findViewById(R.id.textView1);}}


0 0
原创粉丝点击