Activity嵌Fragment,如何切换时保存当前数据
来源:互联网 发布:c语言函数编程心得体会 编辑:程序博客网 时间:2024/05/29 00:34
使用这种用法先熟悉Fragment的生命周期,如下图所示,所以在一个Activity中切换Fragment时,会有数据被清空的情况,下面大致讲下如何保存当前页面数据,不用再次请求网络
Activity切换Fragment的方法如下:注意加粗代码,否则Fragment的getArguments会报null异常
switch (arg0.getId()) {case R.id.home_btu_icon01:CommonTools.applyRotation(home_btu_icon01, 0, 360);setbottomimg(1);if (null == Fragment_Guangchang.getInStanceFragment()) {Fragment_Guangchang fragment = new Fragment_Guangchang();Bundle arguments = new Bundle(); <strong> arguments.putInt("current_id", arg0.getId());</strong> fragment.setArguments(arguments);setcurrentFragment(fragment);} else {setcurrentFragment(Fragment_Guangchang.getInStanceFragment());}break;Fragment代码如下
public class Fragment_Luntan extends Base_Fragment {public static Fragment_Luntan inStanceFragment = null;private Bundle savedState;private TextView list_nodata;private ListView luntan_listViews;private JSONArray tongzhijs = new JSONArray();private JSONArray luntan_ja;private LuntanListAdapter lla;private AutoScrollViewPager picviewpager;private LinearLayout contianer;@Overridepublic void onSaveInstanceState(Bundle outState) {saveStateToArguments();super.onSaveInstanceState(outState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View fragmentView = inflater.inflate(R.layout.fragment_luntan,container, false);luntan_listViews = (ListView) fragmentView.findViewById(R.id.luntan_listViews);list_nodata = (TextView) fragmentView.findViewById(R.id.list_nodata);contianer = (LinearLayout) fragmentView.findViewById(R.id.contianer);inStanceFragment = this;return fragmentView;}@Overridepublic void onActivityCreated(@Nullable Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onActivityCreated(savedInstanceState);if (!restoreStateFromArguments()) {getInfo_LuntanAd();get_PatrolData();}}@Overridepublic void onDestroyView() {super.onDestroyView();// Save State HeresaveStateToArguments();}@Overridepublic void onDestroy() {// TODO Auto-generated method stubinStanceFragment = null;super.onDestroy();}private void saveStateToArguments() {if (getView() != null)savedState = saveState();if (savedState != null) {Bundle b = getArguments();b.putBundle("Fragment_Luntan_InternalSavedViewState",savedState);}}private boolean restoreStateFromArguments() {Bundle b = getArguments();if (null != b&& b.getBundle("Fragment_Luntan_InternalSavedViewState") != null) {savedState = b.getBundle("Fragment_Luntan_InternalSavedViewState");restoreState();return true;}return false;}private void restoreState() {if (savedState != null) {onRestoreState(savedState);}}// 恢复数据protected void onRestoreState(Bundle savedInstanceState) {try {tongzhijs = new JSONArray(savedInstanceState.getString("tongzhijs"));contianer.removeAllViews();contianer.addView(initViewPager());luntan_ja = new JSONArray(savedInstanceState.getString("luntan_ja"));if (luntan_ja.length() > 0) {list_nodata.setVisibility(View.GONE);luntan_listViews.setVisibility(View.VISIBLE);lla = new LuntanListAdapter();luntan_listViews.setAdapter(lla);} else {list_nodata.setVisibility(View.VISIBLE);luntan_listViews.setVisibility(View.GONE);}} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}}private Bundle saveState() {Bundle state = new Bundle();onSaveState(state);return state;}// 保存数据protected void onSaveState(Bundle outState) {outState.putString("tongzhijs", tongzhijs.toString());outState.putString("luntan_ja", luntan_ja.toString());}}
0 0
- Activity嵌Fragment,如何切换时保存当前数据
- Activity销毁时如何保存Fragment状态
- Activity切换时保存数据的方法
- Android 横竖屏切换保存当前数据
- Iwfu-保存Fragment切换时的UI状态/保存销毁Activity后再次进入的视图状态
- android中多个fragment切换时如何避免重复执行onCreateView方法,如何保存上一个fragment的状态
- Activity,Fragment状态保存
- Activity,Fragment状态保存
- Activity中多个fragment切换
- activity、fragment切换动画
- fragment 如何向 activity 传递数据
- Activity如何向Fragment中传递数据
- 如何快速定位当前的Activity和Fragment页面?
- Activity跳转Activity,Fragment切换下一个Fragment
- Activity运行时数据保存
- 如何让Android横竖屏切换时不销毁当前activity
- 如何让Android横竖屏切换时不销毁当前activity
- 如何让Android横竖屏切换时不销毁当前activity
- 用SPFA判断负环的方法及其优化
- MySql建立Table时设置编码为utf-8
- sparksql 解析
- 又是一轮瓶颈
- Python笔记-list
- Activity嵌Fragment,如何切换时保存当前数据
- 安装docker后 ifconfig 多出来一个网卡
- UVA 439 Knight Moves
- Linux通用系统优化
- 安卓小项目之刀刀人脸识别系统
- 设计模式C++实现(19)——命令模式
- java基础线程-继承Runnable接口
- 小学生测试系统
- VS2015+QT5简单例子(二)——读取视频