Activity和多个fragments的切换及数据的传递
来源:互联网 发布:大数据 文化产业 编辑:程序博客网 时间:2024/05/18 23:26
最近做的项目中用到了工作流,工作流的第一个页面调取数据,展示UI,并提供后两个页面的数据,感觉用activity的跳转每次页面还得重新加载,数据展示也不是自己想要的,于是决定用activity+fragments。数据通过activity来传递。因为项目中的base activity和base fragment是自定义封装好的,所以只显示关键部分代码:
Activity:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (null != mCreationFragmentV2 && (mCurrentFragment instanceof ProcessAdvancedCreationFragmentV2)) {
mCreationFragmentV2.onActivityResult(requestCode, resultCode, data);
}
else if (null != mAssigmentFragment && (mCurrentFragment instanceof ProcessAdvancedCreationAssigmentFragment)) {
mAssigmentFragment.onActivityResult(requestCode, resultCode, data);
}
else if (null != mLaunchDataFragment && (mCurrentFragment instanceof ProcessLaunchDataFragment)) {
mLaunchDataFragment.onActivityResult(requestCode, resultCode, data);
}
}
private void initFragmentList() {
mBundle = new Bundle();
mBundle.putSerializable(KEY_WORKFLOWMETA_REOCRD, mWorkflowMeta);
mBundle.putSerializable(KEY_FORMTEMPLATE_LIST, mFormTemplateArrayList);
mCreationFragmentV2 = new ProcessAdvancedCreationFragmentV2();
mCreationFragmentV2.setChangeDataListener(this);
mAssigmentFragment = new ProcessAdvancedCreationAssigmentFragment();
mAssigmentFragment.setArguments(mBundle);
mLaunchDataFragment = new ProcessLaunchDataFragment();
mLaunchDataFragment.setArguments(mBundle);
mCurrentFragment = mCreationFragmentV2;
mManger = getSupportFragmentManager();
mFragments = new ArrayList<>();
mFragments.add(mCreationFragmentV2);
mFragments.add(mAssigmentFragment);
mFragments.add(mLaunchDataFragment);
}
private void switchFragment() {
if (mCurrentPosition < 0){
mCurrentPosition = 0;
return;
}
else if (mCurrentPosition > mFragments.size() - 1) {
mCurrentPosition = mFragments.size() - 1;
return;
}
if (!mFragments.get(mCurrentPosition).isAdded()) {
mManger.beginTransaction().add(R.id.myv_fragment_container, mFragments.get(mCurrentPosition)).commit();
}
showFragment(mCurrentPosition);
}
private void showFragment(int curShowPosition) {
if (null == mFragments) {
return;
}
mCurrentFragment = mFragments.get(curShowPosition);
for (int i = 0; i < mFragments.size(); i++) {
FragmentTransaction fragmentTransaction = mManger.beginTransaction();
if (i == curShowPosition) {
fragmentTransaction.show(mFragments.get(i));
}
else {
fragmentTransaction.hide(mFragments.get(i));
}
fragmentTransaction.commit();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.myv_next) {
mCurrentPosition += 1;
}
else if (item.getItemId() == android.R.id.home) {
mCurrentPosition-=1;
if (mCurrentPosition < 0) {
onBackPressed();
}
}
switchFragment();
return true;
}
//接口的实现
@Override
public void updateActivityData(WorkflowMeta workflowMeta, ArrayList<FormTemplate> formTemplates) {
this.mWorkflowMeta = workflowMeta;
this.mFormTemplateArrayList = formTemplates;
mBundle.putSerializable(KEY_WORKFLOWMETA_REOCRD, Record1);
mBundle.putSerializable(KEY_FORMTEMPLATE_LIST, Record2);
}
}
Fragment:
private ProcessUpdateActivityDataListener mDataListener;
mDataListener.updateActivityData(mWorkflowMeta, mFormTemplates);
public void setChangeDataListener(ProcessUpdateActivityDataListener listener) {
mDataListener = listener;
}
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if (!hidden) {
getDataFromActivity();
}
}
@Override
public void onFragmentStart() {
super.onFragmentStart();
getDataFromActivity();
}
private void getDataFromActivity() {
if (null != getArguments()) {
mWorkflowMeta = (WorkflowMeta) getArguments().getSerializable(ProcessAdvancedCreateNewActivity.KEY_WORKFLOWMETA_REOCRD);
mFormTemplates = (List<FormTemplate>) getArguments().getSerializable(ProcessAdvancedCreateNewActivity.KEY_FORMTEMPLATE_LIST); } }
数据传递实现的方法是:Activity-》Fragment: Bundle和setArguments() Fragment->Activity Activity中实现接口的方式。
Activity:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (null != mCreationFragmentV2 && (mCurrentFragment instanceof ProcessAdvancedCreationFragmentV2)) {
mCreationFragmentV2.onActivityResult(requestCode, resultCode, data);
}
else if (null != mAssigmentFragment && (mCurrentFragment instanceof ProcessAdvancedCreationAssigmentFragment)) {
mAssigmentFragment.onActivityResult(requestCode, resultCode, data);
}
else if (null != mLaunchDataFragment && (mCurrentFragment instanceof ProcessLaunchDataFragment)) {
mLaunchDataFragment.onActivityResult(requestCode, resultCode, data);
}
}
private void initFragmentList() {
mBundle = new Bundle();
mBundle.putSerializable(KEY_WORKFLOWMETA_REOCRD, mWorkflowMeta);
mBundle.putSerializable(KEY_FORMTEMPLATE_LIST, mFormTemplateArrayList);
mCreationFragmentV2 = new ProcessAdvancedCreationFragmentV2();
mCreationFragmentV2.setChangeDataListener(this);
mAssigmentFragment = new ProcessAdvancedCreationAssigmentFragment();
mAssigmentFragment.setArguments(mBundle);
mLaunchDataFragment = new ProcessLaunchDataFragment();
mLaunchDataFragment.setArguments(mBundle);
mCurrentFragment = mCreationFragmentV2;
mManger = getSupportFragmentManager();
mFragments = new ArrayList<>();
mFragments.add(mCreationFragmentV2);
mFragments.add(mAssigmentFragment);
mFragments.add(mLaunchDataFragment);
}
private void switchFragment() {
if (mCurrentPosition < 0){
mCurrentPosition = 0;
return;
}
else if (mCurrentPosition > mFragments.size() - 1) {
mCurrentPosition = mFragments.size() - 1;
return;
}
if (!mFragments.get(mCurrentPosition).isAdded()) {
mManger.beginTransaction().add(R.id.myv_fragment_container, mFragments.get(mCurrentPosition)).commit();
}
showFragment(mCurrentPosition);
}
private void showFragment(int curShowPosition) {
if (null == mFragments) {
return;
}
mCurrentFragment = mFragments.get(curShowPosition);
for (int i = 0; i < mFragments.size(); i++) {
FragmentTransaction fragmentTransaction = mManger.beginTransaction();
if (i == curShowPosition) {
fragmentTransaction.show(mFragments.get(i));
}
else {
fragmentTransaction.hide(mFragments.get(i));
}
fragmentTransaction.commit();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.myv_next) {
mCurrentPosition += 1;
}
else if (item.getItemId() == android.R.id.home) {
mCurrentPosition-=1;
if (mCurrentPosition < 0) {
onBackPressed();
}
}
switchFragment();
return true;
}
//接口的实现
@Override
public void updateActivityData(WorkflowMeta workflowMeta, ArrayList<FormTemplate> formTemplates) {
this.mWorkflowMeta = workflowMeta;
this.mFormTemplateArrayList = formTemplates;
mBundle.putSerializable(KEY_WORKFLOWMETA_REOCRD, Record1);
mBundle.putSerializable(KEY_FORMTEMPLATE_LIST, Record2);
}
}
Fragment:
private ProcessUpdateActivityDataListener mDataListener;
mDataListener.updateActivityData(mWorkflowMeta, mFormTemplates);
public void setChangeDataListener(ProcessUpdateActivityDataListener listener) {
mDataListener = listener;
}
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if (!hidden) {
getDataFromActivity();
}
}
@Override
public void onFragmentStart() {
super.onFragmentStart();
getDataFromActivity();
}
private void getDataFromActivity() {
if (null != getArguments()) {
mWorkflowMeta = (WorkflowMeta) getArguments().getSerializable(ProcessAdvancedCreateNewActivity.KEY_WORKFLOWMETA_REOCRD);
mFormTemplates = (List<FormTemplate>) getArguments().getSerializable(ProcessAdvancedCreateNewActivity.KEY_FORMTEMPLATE_LIST); } }
数据传递实现的方法是:Activity-》Fragment: Bundle和setArguments() Fragment->Activity Activity中实现接口的方式。
1 0
- Activity和多个fragments的切换及数据的传递
- 添加一个Activity的要点及多个Activity之间数据的传递
- 实现2个Activity之间跳转及数据的传递
- Android之Activity的生命周期和Activity间的切换和数据传递(二)
- 多个Activity之间的切换与数据交互
- 多个Activity跳转间的数据传递(一)
- activity之间的跳转及传递数据
- activity的生命周期及传递数据
- 04 Activity窗口间的切换及参数的传递
- Android之Activity切换和数据传递
- Activity间的切换实现和数据传递以及上一个Activity返回结果的获取和处理
- Android -- 两个activity界面的切换, 显示Intent 和 隐式Intent,putExtra传递数据
- (Kevin笔记四)activity相互切换的时候怎么传递和刷新数据
- Android开发 --- 多个Activity,及之间数据传递 Intent
- fragment和activity之间的数据传递
- Fragment和Activity之间的数据传递
- Activity的跳转和传递数据
- Activity和Fragment的数据传递
- SASS学习
- redis部署和启动
- 配置文件ehcache.xml详解(3)—<ehcache>
- jetBrains 系列产品激活序列号
- webpack入门学习2
- Activity和多个fragments的切换及数据的传递
- 一天搞定CSS: 清除浮动(float)--13
- 时间对话框DatePickerDialog
- UE4渲染线框
- iOS 字符串处理
- java螺旋数组
- 一位资深程序员大牛给予Java初学者的学习路线建议
- Qt与C#之间的代码移植细节--慢慢的
- FreeMarker入门案例