Fragment切换的时候,保存数据状态(执行onResume),不重新加载
2014-06-27 17:17
513 查看
关键代码来自:/article/4917458.html
import android.app.Activity; import android.app.Fragment; import android.app.FragmentTransaction; import android.os.Bundle; import android.view.View; import android.widget.RadioButton; import android.widget.RadioGroup; import java.util.ArrayList; import java.util.List; public class FixturesChildActivity extends Activity { private RadioGroup mRGSwitch;// 单选按钮组 public List<Fragment> fragments = new ArrayList<Fragment>(); private ArrayList<View> viewLines = new ArrayList<View>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取RadioButton下高亮的黄线 View line1 = this.findViewById(R.id.fixtures_child_left_radio_button_line); View line2 = this.findViewById(R.id.fixtures_child_chatroom_button_line); View line3 = this.findViewById(R.id.fixtures_child_right_radio_button_line); View line4 = this.findViewById(R.id.fixtures_child_caipiao_radio_button_line); //加入集合 viewLines.add(line1); viewLines.add(line2); viewLines.add(line3); viewLines.add(line4); fragments.add(new TabAFm()); fragments.add(new TabBFm()); fragments.add(new TabCFm()); fragments.add(new TabDFm()); fragments.add(new TabEFm()); mRGSwitch = (RadioGroup) findViewById(R.id.fixtures_child_radio_group); new FragmentsAdapter(FixturesChildActivity.this, fragments, R.id.fixtures_child_view_child_view, mRGSwitch); } /** * fragment适配器 */ public class FragmentsAdapter implements RadioGroup.OnCheckedChangeListener { private List<Fragment> fragments; // 一个tab页面对应一个Fragment private RadioGroup rgs; // 用于切换tab private Activity mActivity; // Fragment所属的Activity private int fragmentContentId; // Activity中所要被替换的区域的id private int currentTab; // 当前Tab页面索引 public FragmentsAdapter(Activity fragmentActivity, List<Fragment> fragments, int fragmentContentId, RadioGroup rgs) { this.fragments = fragments; this.rgs = rgs; this.mActivity = fragmentActivity; this.fragmentContentId = fragmentContentId; // 默认显示第一页 FragmentTransaction ft = fragmentActivity.getFragmentManager() .beginTransaction(); ft.add(fragmentContentId, fragments.get(0)); ft.commit(); rgs.setOnCheckedChangeListener(this); } @Override public void onCheckedChanged(RadioGroup radioGroup, int checkedId) { for (int i = 0; i < rgs.getChildCount(); i++) { if (rgs.getChildAt(i).getId() == checkedId) { //把前一个RadioButton文本颜色设置为白色 ((RadioButton) rgs.getChildAt(getCurrentTab())) .setTextColor(getResources() .getColor(R.color.white)); //把本次点击RadioButton文本颜色设置为蓝色 ((RadioButton) rgs.getChildAt(i)) .setTextColor(getResources().getColor(R.color.blue)); viewLines.get(getCurrentTab()).setBackgroundColor(getResources().getColor(R.color.transparent)); viewLines.get(i).setBackgroundColor(getResources().getColor(R.color.light_yellow)); Fragment fragment = fragments.get(i); FragmentTransaction ft = mActivity.getFragmentManager() .beginTransaction(); getCurrentFragment().onPause(); // 暂停当前tab if (fragment.isAdded()) { fragment.onResume(); // 启动目标tab的onResume() } else { ft.add(fragmentContentId, fragment); } showTab(i); // 显示目标tab ft.commit(); } } } /** * 切换tab * * @param idx */ private void showTab(int idx) { for (int i = 0; i < fragments.size(); i++) { Fragment fragment = fragments.get(i); FragmentTransaction ft = mActivity.getFragmentManager() .beginTransaction(); if (idx == i) { ft.show(fragment); } else { ft.hide(fragment); } ft.commit(); } currentTab = idx; // 更新目标tab为当前tab } public int getCurrentTab() { return currentTab; } public Fragment getCurrentFragment() { return fragments.get(currentTab); } } }
另一实现方式:/article/4602871.html
此外可以,将Fragment放置于ViewPager中,自动保存其状态。相关文章推荐
- android 关于FragmentPagerAdagter页面切换更新及页面切换后重新加载数据,或不执行onResume
- fragment每次切换的时候都要重新加载数据,解决方法
- FragmentTabHost切换Fragment时避免UI重新加载,Fragment保存状态
- 完成了WF工作流持久化和对持久化介质数据的加载, 但是仅仅用持久化,不能够保存工作流当前的执行状态,需要跟踪服务支持,怎样使用Tracing 服务呢?
- 完成了WF工作流持久化和对持久化介质数据的加载, 但是仅仅用持久化,不能够保存工作流当前的执行状态,需要跟踪服务支持,怎样使用Tracing 服务呢?
- android中多个fragment切换时如何避免重复执行onCreateView方法,如何保存上一个fragment的状态
- 多个fragment切换,而不重新加载数据的实现
- ViewPager中切换及滑动切换Fragment数据保存状态讲解
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- fragment切换保存原来状态的几种方式
- 【Android】保存Fragment切换状态
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- FragmentTabHost中切换Fragment状态保存的几种方法
- 【Android】保存Fragment切换状态
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- 解决Fragment每次切换时数据重新获取问题
- viewPager 页面切换时 fragment重新加载问题
- android fragment切换无法保存状态的一种解决方法
- 【Android开发日记】Fragment切换如何保存状态?Viewpager简单搞定
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信