之所以用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中已经有的数据类型,像String,int,double等,但如果要传递一个对象呢?不难发现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的传值还是很简单的,结束