Bundle实现传值

之所以用Bundle实现传值是因为在一次打包测试过程中,打包失败,但是不打包运行就可以。错误提示:构造函数的问题,网上搜了下是Google建议用Bundle。现在直接上我的代码,清晰明了

由IndianaOneFragment.java 跳转到 GoodsTwoFragment.java 实现第一个Fragment到第二个Fragment传递drawId、cmdtType

首先对于IndianaOneFragment.java中代码:

  //获取cmdtType drawId 传给二级
                String cmdtType=goodsInfo.get(position).getCmdtType();
                String drawId=goodsInfo.get(position).getDrawId();
                LogUtils.i("drawIddddd"+drawId);
                Intent intent=new Intent(getActivity(), DesActivity.class);
                intent.putExtra("key","GoodsFrament");
                intent.putExtra("drawId",drawId);
                intent.putExtra("cmdtType",cmdtType);
                startActivity(intent);
其次对于中间DesActivity.java中代码:

case "GoodsFrament":
                cmdtType=intent.getStringExtra("cmdtType");
                drawId=intent.getStringExtra("drawId");
                if (null==goodsTwoFragment){
                    goodsTwoFragment=new GoodsTwoFragment();

                }
                Bundle b = new Bundle();
                b.putCharSequence("drawid", drawId);
                b.putCharSequence("cmdttype",cmdtType);
                goodsTwoFragment.setArguments(b);
                ft=getSupportFragmentManager().beginTransaction();
                ft.replace(R.id.des_framelayout,goodsTwoFragment,"GoodsTwo");
                ft.commit();
                break;
最后就是接受参数的GoodsTwoFragment.java中代码:

 Bundle argument = getArguments();
        this.drawId = (String) argument.get("drawid");
        this.cmdtType = (String) argument.get("cmdttype");

最后说一下原理:

假如需要在两个activity间传递数据,我们通常都是用Bundle,但是里面似乎只有一些放置一些Java中已经有的数据类型,像Stringintdouble等,但如果要传递一个对象呢?不难发现Bundle中有一个方法putSerializable,利用该对象就可以传递对象了,不过传递的对象要实现Serializable接口

android中的组件间传递的对象一般实现Parcelable接口,当然也可以使用java的Serializable接口,前者是android专门设计的,效率更高

例如:
传递参数java类
Intent intent = new Intent();  
intent.setClass(this, SubActivity.class);  
// 直接添加  
//intent.putExtra("MyData", new ParcelableData());  
  
// 通过Bundle  
Bundle bundle = new Bundle();  
bundle.putString("MyString", "test bundle");  
bundle.putParcelable("MyData", new ParcelableData());  
intent.putExtras(bundle);  
startActivity(intent); 
接受参数java类
Bundle bundle = getIntent().getExtras();  
ParcelableData parcelableData = bundle.getParcelable("MyData");  
String testBundleString = bundle.getString("MyString");  
Log.v("string=", testBundleString);  
Log.v("name=", parcelableData.getName());  
Log.v("age=", ""+parcelableData.getAge());  

ok,关于Bundle的传值还是很简单的,结束 



  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值