问题描述
- 当Fragment视图存在时,FragmentActivity如何传值,Fragment如何接收值?求实例
-
当Fragment视图存在时,FragmentActivity如何传值,Fragment如何接收值?求实例
解决方案
很多方法,handler或者发送广播都可以
解决方案二:
使用eventbus进行通讯
解决方案三:
1.Fragment是依托于Activity的所以
2.在Fragment的生命周期方法中可以调用getActivity();方法
3.通过此方法获得当前Fragment所依托的Activity的对象
4.既然Activity的对象都获得了那么其中的数据不就也能获得了么
比如:
Activity中:
public class MyActivity extend Fragment Activity{
private List data;
@override
public void onCreate(){
data = new List ;
}
//添加此方法为了在Fragment中获得Activity中数据
public List getData(){
return data;
}
}
Fragment 中:
public class MyFragment extend Fragment{
@override
public view onCreatView(){
//在生命周期中首先获得依托的Activity的对象
Activity activity=getActivity();
List<String> data = activity.getData();
//现在获得的数据不就是Activity中传过来的么
}
}
解决方案四:
1.Fragment是依托于Activity的所以
2.在Fragment的生命周期方法中可以调用getActivity();方法
3.通过此方法获得当前Fragment所依托的Activity的对象
4.既然Activity的对象都获得了那么其中的数据不就也能获得了么
比如:
Activity中:
public class MyActivity extend Fragment Activity{
private List data;
@override
public void onCreate(){
data = new List ;
}
//添加此方法为了在Fragment中获得Activity中数据
public List getData(){
return data;
}
}
Fragment 中:
public class MyFragment extend Fragment{
@override
public view onCreatView(){
//在生命周期中首先获得依托的Activity的对象
Activity activity=getActivity();
List<String> data = activity.getData();
//现在获得的数据不就是Activity中传过来的么
}
}
解决方案五:
fragment 的数据传递分为两种情况
1.在activity中给fragment传递数据:
在activity中传递数据,在fragment中接收数据并显示出来:
把fragment作为一个普通的对象,调用它的方法,把数据传递过去.
2.在fragment中给activity传递数据:
把activity作为一个普通的对象,调用它的方法,把数据传递过去
#第一种情况代码实现
**传递数据
//响应提交按钮的点击事件
public void submit(View v){
// 1.从输入框中取出数据
String data = et_data.getText().toString();
// 2.传递给fragment
// 把fragment作为一个普通的对象,调用它的方法,把数据传递过去
f01.getData(data);
}
**接收数据
/**
- 接收activity传递过来的数据,并显示出来
- @param data
*/
public void getData(String data){
tv_data.setText(data);
}
#第二种情况的代码实现
注意:在fragment 中的布局文件中 onClick 属性是不起作用的,它只在activity中能使用
fragment 中对于按钮只能使用按钮的点击事件的监听
**传递数据
btn_info.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 1.从输入框中取出数据
String info = et_info.getText().toString();
// 2.传递给activity
// 把activity作为一个普通的对象,调用它的方法,把数据传递过去
// getActivity 得到fragment01所运行在的activity对象
FragmentActivity activity = getActivity();
if(activity instanceof MainActivity){
//做一次强制类型转换
MainActivity mainActivity = (MainActivity)activity;
// 把activity作为一个普通的对象,调用它的方法,把数据传递过去
mainActivity.getInfo(info);
}
}
});
**接收数据
public void getInfo(String info){
//接受fragment传递过来的数据显示在输入框中
et_data.setText(info);
}
解决方案六:
建议通过回调接口进行传值。
activity向frament传值直接通过findFragmentById获取实例,然后调用fragment里的方法即可。
articleFragment = (ArticleFragment) fragmentManager.findFragmentByTag(TAG_ARTICLE);
if (articleFragment != null) {
articleFragment.updateArticleView(item);
}
fragment向activity传值通过回调接口。activity中实现fragment的接口。在fragment里面回调即可。
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnChangeArticleListener) {
mListener = (OnChangeArticleListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnChangeArticleListener");
}
}
。。。
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (null != mListener) {
// Notify the active callbacks interface (the activity, if the
// fragment is attached to one) that an item has been selected.
mListener.onChangeArticle(holder.mItem);
}
}
});