关于Fragment之间页面跳转时的extra信息的传递
2016-01-27 22:49
507 查看
先说一下应用背景,一个list,item点击,跳转到相应的页面。界面如下
这里面的页面都是使用activity托管fragment的。一般来说,以前我做的比较的页面,页面之间的信息都是直接放在Intent里面,跳转之后直接getIntent()方法(在fragment中使用getactivity().getIntent()方法),再获取相关字段就行了,,,这个例子我是在《安卓编程权威指南》一书中看到的。书中是这样说的“以这种方式是以牺牲fragment的封装性为代价的。CrimeFragmnet(跳转的目标页面的Fragment)不再是可复用的构建单元,因为它总是需由某个具体的activity托管着,该activity又定义了名为EXTRA_CRIME_ID的extra。”也就是说,该Fragment无法适用于其他的activity了,书中介绍了一个新的方法(对于我这样的初学者来说),我们点击不同的item肯定是打开同一个页面,加载不同的数据,一般我们都会想到把数据保存到intent中,传递过去,这样的缺点已经说过,那么我们可以将数据保存到CrimeFragment的私有空间中,这样,我们无需依赖于外部intent指定的extra中的信息。具体的做法是
1.首先在CrimeFragment(跳转的目标activity中的fragment)中添加newInstance方法,如下
**传入的UUID是确定点击的信息的,
它是这样确定的**
这里点击跳转过来是一个ViewPager,通过setCurrentItem方法设置点击的位置,在FragmentStatePagerAdapter的getItem方法中,调用newInstance方法返回一个视图,以position为参数(这里,position和数据在list中的位置,以及点击的位置是一致的)这样我们就可以在new一个fragment的时候将需要加载的数据的id(位置)保存在fragment的argument中,在fragment的onCreate方法中这样获取
这里面的页面都是使用activity托管fragment的。一般来说,以前我做的比较的页面,页面之间的信息都是直接放在Intent里面,跳转之后直接getIntent()方法(在fragment中使用getactivity().getIntent()方法),再获取相关字段就行了,,,这个例子我是在《安卓编程权威指南》一书中看到的。书中是这样说的“以这种方式是以牺牲fragment的封装性为代价的。CrimeFragmnet(跳转的目标页面的Fragment)不再是可复用的构建单元,因为它总是需由某个具体的activity托管着,该activity又定义了名为EXTRA_CRIME_ID的extra。”也就是说,该Fragment无法适用于其他的activity了,书中介绍了一个新的方法(对于我这样的初学者来说),我们点击不同的item肯定是打开同一个页面,加载不同的数据,一般我们都会想到把数据保存到intent中,传递过去,这样的缺点已经说过,那么我们可以将数据保存到CrimeFragment的私有空间中,这样,我们无需依赖于外部intent指定的extra中的信息。具体的做法是
1.首先在CrimeFragment(跳转的目标activity中的fragment)中添加newInstance方法,如下
public static CrimeFragment newInstance(UUID crimeId) { Bundle args = new Bundle(); args.putSerializable(EXTRA_CRIME_ID, crimeId); CrimeFragment fragment = new CrimeFragment(); fragment.setArguments(args); return fragment; }
**传入的UUID是确定点击的信息的,
它是这样确定的**
mViewPager.setAdapter(new FragmentStatePagerAdapter(fm) { @Override public int getCount() { // TODO Auto-generated method stub return mCrimes.size(); } @Override public Fragment getItem(int pos) { // TODO Auto-generated method stub Crime crime = mCrimes.get(pos); return CrimeFragment.newInstance(crime.getID()); } }); UUID crimeId = (UUID) getIntent().getSerializableExtra( CrimeFragment.EXTRA_CRIME_ID); for (Crime cri : mCrimes) { if (cri.getID().equals(crimeId)) { setTitle(cri.getTitle()); mViewPager.setCurrentItem(mCrimes.indexOf(cri)); break; } }
这里点击跳转过来是一个ViewPager,通过setCurrentItem方法设置点击的位置,在FragmentStatePagerAdapter的getItem方法中,调用newInstance方法返回一个视图,以position为参数(这里,position和数据在list中的位置,以及点击的位置是一致的)这样我们就可以在new一个fragment的时候将需要加载的数据的id(位置)保存在fragment的argument中,在fragment的onCreate方法中这样获取
@Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setHasOptionsMenu(true); UUID crimeId = (UUID) getArguments().getSerializable( CrimeFragment.EXTRA_CRIME_ID); mCrime = CrimeLab.get(getActivity()).getCrime(crimeId); }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories