Fragment系列解析之三---Fragment和Fragment、Activity之间传值
来源:互联网 发布:淘宝最低折扣修改 编辑:程序博客网 时间:2024/05/16 02:00
今天这篇文章我们来聊一下和Fragment有关的传值。
1、先来说一下Fragment和Fragment之间是怎么传值得吧。
一、
在Fragment的宿主Activity创建一个变量,然后给它设置set和get方法,然后我们可以在Fragment中取出此值,也可以改变此值。
这种方法一般是用在要传的值比较简单,或者内容单一的话。
二、
在Fragment的宿主Activity里定义一个方法用来判断贴附哪个Fragment,同时把值传过去;
public void switchConent(Fragment fragment, String title, String fragmentFlag, Bundle bundle) { // 用来传递bundle fragment.setArguments(bundle); mContent = fragment; if (!"".equals(fragmentFlag{ getSupportFragmentManager().beginTransaction().replace(R.id.content_frame,fragment,fragmentFlag).addToBackStack(fragmentFlag).commit(); } else { getSupportFragmentManager().beginTransaction() .replace(R.id.content_frame, fragment).commit(); } }
通过这个方法,我们可以选择要贴附的Fragment和要传的内容bundle,上面代码是使用的replace进行替代,并根据TAG判断是否加入回退栈,这是我以前的项目写的。当然如果使用的是hide和show方法的话,这样就不可以了。因为show和hide方法没有传值这过程。
三、定义回调
我们可以定义一个接口,里面写上一个抽象的回调的方法,让所有Fragment都实现它,这时最好定义一个baseFragment,然后在Activity里写上一个setInterface()的方法,里面参数为接口对象(也就是我们的Fragment),然后在切换Fragment的时候,我们先调用setInterface方法,把我们要换的Fragment传进去,然后在调用这个接口的抽象方法,抽象方法的参数即为我们要传的参数,此时,贴附的Fragment调用实现接口的抽象方法,达到接收参数的目的。
因为我手上的电脑很卡,用不了开发工具,所以我就简单写了一个大致的代码,意思是这样的:
interface MyCallBack{void callBack(String result);}public class MainActivity{ private MyCallBack myCallBack; public void setMycallBack(MyCallBack myCallBack){ this.myCallBack=myCallBack; } public void setFragment(String result){ //切换Fragment的代码,可以是replace,add也可以是show,hide myCallBack.callBack(String result); }}public class MyFragmentA implements MyCallBack{ public void callBack(String result){ //根据传过来的参数,进行我们的操作 } public void switchFragment(String result){ //切换Fragment,并向Fragment传值 getActivity().setFragment(String result) }}
2、Fragment和Activity之间传值:
一、Activity向Fragment传值:
这个就很简单了,就是在刚开始添加Fragment的时候使用bundle进行传值,
fragment.setArguments(bundle);getSupportFragmentManager().beginTransaction().replace(R.id.content_frame,fragment,fragmentFlag).addToBackStack(fragmentFlag).commit();
然后Fragment那里就一句代码就可以了
Bundle bundle = getArguments();//从activity传过来的Bundle
二、Fragment向自己的Activity传值:
1.在Fragment中写一个回调接口
2.在activity中实现这个回调接口
3,在Fragment中onAttach 方法中得到activity中实现好的 实例化接口对象
4,用接口的对象 进行传值
MainActivity:
public class MainActivity extends Activity implements CallBackValue{ private TextView tv1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv1 = (TextView) findViewById(R.id.tv1); FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.add(R.id.contents, new Fragmen1()); transaction.commit(); } //要获取的值 就是这个参数的值 @Override public void SendMessageValue(String strValue) { // TODO Auto-generated method stub tv1.setText(strValue); }}
Fragment:
public class Fragmen1 extends Fragment{ private Button btn1; private EditText et1; CallBackValue callBackValue; /** * fragment与activity产生关联是 回调这个方法 */ @Override public void onAttach(Activity activity) { // TODO Auto-generated method stub super.onAttach(activity); //当前fragment从activity重写了回调接口 得到接口的实例化对象 callBackValue =(CallBackValue) getActivity(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub View view = inflater.inflate(R.layout.fragment_layout1, container, false); btn1 = (Button) view.findViewById(R.id.btn1); et1 = (EditText) view.findViewById(R.id.et1); btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String strValue = et1.getText().toString().trim(); callBackValue.SendMessageValue(strValue); } }); return view; } //定义一个回调接口 public interface CallBackValue{ public void SendMessageValue(String strValue); }}
三、Fragment向其它Activity传值:
这其实就是在Fragment调用它的Activity向另一个Activity传值了
context = getActivity().getApplicationContext(); Intent intent = new Intent(context,详情页.class);
- Fragment系列解析之三---Fragment和Fragment、Activity之间传值
- Activity和Fragment之间的传值
- activity嵌套fragment,fragment内嵌fragment之间传值切换fragment
- Activity与Activity,Activity与Fragment及Fragment与Fragment之间传值
- Fragment和Activity之间的传参
- Activity和Fragment之间相互传值和调用方法
- Android之---Activity与Fragment之间的传值问题
- 用Broadcast广播在activity之间、fragment之间、activity和fragment之间相互传数据
- Activity与fragment之间的传值:fragment的setArguments()和getArguments()
- Android中fragment之间和Activity的传值、切换
- activity和fragment之间的简单传值
- Fragment与Activity之间传值
- Activity与Fragment之间的传值
- Activity与Fragment之间的传值
- Fragment与Activity之间传值
- Activity与Fragment之间的传值
- Fragment与Activity之间传值,Fragment与Fragment传值以及对commit的理解
- 安卓学习之路之Fragment和Activity之间的传值
- QT学习笔记04内存回收
- jquery从前台循环设置值
- MD5算法可以破解么?为什么?网上有在线破解是怎么回事?
- 【JZOJ3853】【NOIP2014八校联考第2场第2试9.28】帮助Bsny(help)
- 中国最牛死刑犯揭秘:执行死刑前一天翻盘大逆转
- Fragment系列解析之三---Fragment和Fragment、Activity之间传值
- c语言输出格式
- 使用vue.js模仿小米官网的作品
- 公钥,私钥,加密和签名
- BZOJ 3832 [Poi2014] Rally 拓扑排序
- sublime3_latex
- 《女人的起源》笔记转载
- 【HDU 1408】盐水的故事 水
- url超过长度限制的问题