先看效果:蓝色区域为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中实现接口响应回调方法
//实现接口响应回调方法
@Override
public 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;
}
@Override
public 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() {
@Override
public void onClick(View v) {
mcallback.callback("接收到来自leftfragment的消息");
}
});
}
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);
}
}
}
}
</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;
@Override
public void onAttach(Context context) {
// TODO Auto-generated method stub
super.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);
}
@Override
protected 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() {
@Override
public void callback(String str) {
//把从leftfragment得到的消息传递给rightfragment让其显示
rightfragment.showfromleft(str);
}
});
btSendTofragment.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle=new Bundle();
bundle.putString("msg", "收到activity发送来的消息");
rightfragment.setArguments(bundle);
transaction.commit();
}
});
}
//实现接口响应回调方法
@Override
public void showMessage(int index) {
if(index==1){
tvMessage.setText("这是第一页 这是第一页 这是第一页 这是第一页");
}
if(index==2){
tvMessage.setText("这是第二页 这是第二页 这是第二页 这是第二页");
}
if(index==3){
tvMessage.setText("这是第三页 这是第三页 这是第三页 这是第三页");
}
}
@Override
protected void onResume() {
super.onResume();
//tvMessage=(TextView) findViewById(R.id.textView1);
}
}