1.Activity向Fragment传递消息
.
方法一:通过Bundle,setArguments(),getArguments()来传递消息:
Activity中setArguments():
Fragment1 fragment1 = new Fragment1();
Bundle bundle = new Bundle();
bundle.putInt("key",value);
fragment.setArguments(bundle);
Fragment中getArguments():
Bundle bundle = new Bundle();
int a = bundle.getInt("key");
当然也可以这样写
Activity中创建Fragment:
Fragment1 fragment1 = Fragment1.newInstance("我是String");
Fragment:
public class Fragment1 extends Fragment{
private Context context;
private String s;
public static Fragment1 newInstance(String value) {
Fragment1 fragment1 = new Fragment1();
Bundle args = new Bundle();
args.putString("key", value);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
s = getArguments().getString("key");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, null);
context = getActivity();
return view;
}
}
方法二:通过Fragment中直接new一个Activity:
Activity中创建一个public的变量或者方法:
public static int a;
public void ActivityToFragment(){
//TODO:这是方法
}
Fragment中获得Activity的信息:
MainActivity activity = (MainActivity) getActivity();
//执行Activity中的ActivityToFragment方法,其实这个也可以用来作为Fragment传递值给Activity,
//在ActivityToFragment()中 添加ActivityToFragment("abc");然后去Activity中把这个"abc"用起来。
activity.ActivityToFragment();
//获取Activity中的a
int a = activity.a;
##2.Fragment向Activity传递消息##
方法一:通过接口回调
fragment中写好接口
private CallBackListener callBackListener;//声明内部定义的回调接口
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
callBackListener= (CallBackListener)activity;
}
//在需要使用的地方加入接口回调,比如按了某个按钮
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String value = "这是Fragment1中传递过来的值";
callBackListener.CallBack();
callBackListener.CallBack2(value);
}
});
public static interface CallBackListener{
public void CallBack();
public void CallBack2(String str);//向Activity传值
}
在父Activity中需要实现Fragment中的接口:
public class MainActivity extends Activity implements Fragment1.CallBackListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onCallBack() {
//TODO:做需要做的事
}
@Override
public void onCallBack(String str) {
//TODO:str传递过来的值
Toast.makeText(this,str,Toast.LENGTH_SHORT).show();
}
}
3.Fragment和Fragment传递消息
通过他们共同的Activity进行,其实也就是上面的两种方法结合用。在Activity中添加一个临时的值,用来传递。