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
- activity与fragment通信汇总
- Android 中Fragment与Activity通信大汇总
- Fragment与Activity通信
- Fragment与Activity通信
- Fragment与Activity通信
- Fragment与Activity通信
- Fragment与Activity通信
- Fragment与Activity通信
- Fragment与Activity通信
- Activity与Fragment通信
- Fragment与Activity通信
- Fragment与Activity通信
- 【Android】Fragment与Activity通信
- Fragment与Activity进行通信
- Fragment与Activity通信 Android
- Activity与Fragment通信方式
- 实现Fragment与Activity通信
- Fragment与Activity的通信:
- c++中的模板
- TimePickerDialog和DatePickerDialog使用及问题解决
- 292.[LeetCode]Nim Game
- Flume:本地文件到Kafka
- Mybatis学习记录(三)--Mybatis配置文件详解
- activity与fragment通信汇总
- HDU 4622 Reincarnation 后缀自动机
- Intent详解
- (LeetCode 191) Number of 1 Bits
- CLM研究
- [POJ 3276] Face The Right Way (翻转问题+技巧)
- Error:Configuration with name 'default' not found. 解决办法
- java并发的线程安全单例模式
- spoj HS12MBR - Minimum Bounding Rectangle