【Android开发日记】Fragment切换如何保存状态?Viewpager简单搞定
2014-07-06 01:34
645 查看
一组Fragment切换,最简单的就是一组按钮,绑定点击监听事件:
但是replace方法 会重新布局一个fragment,之前在这个fragment上的操作就丢失了。
今天在网上试探各种方法总结一下:
1.用add,然后用hide()和show()控制哪个fragment呈现出来.......我实验没成功....
2.http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0313/1591.html
3.http://www.cnblogs.com/over140/p/3362047.html
4.http://www.cnblogs.com/manuosex/p/3587577.html
最后我还是使用了viewpager,自定义viewpager禁止滑屏
代码1:mainactivity.xml
其中CustomViewPager为自己定义的viewpager,com.ttdevs.lcb是包名
代码2:CustomViewPager.java
代码3:MainActivity.java
你一定不会忘了,我就忘了。然后结果是1,2切换没问题,1,3 1,4 2,3 2,4 切换就发现1的状态又丢失了。这个方法是设置缓冲区fragment页面个数的。。
代码4:FragmentAdapter.java
MainpageFra.java 、Home2Fra.java、Home3Fra.java、SettingFra.java就是一般的Fragment,这里不再列出了。
如果照上面的代码fragment状态还是不能保存的请留言。
private FragmentManager mFM = null; mBt1 = (ImageView) findViewById(R.id.tab_bt_1); mBt2 = (ImageView) findViewById(R.id.tab_bt_2); mBt3 = (ImageView) findViewById(R.id.tab_bt_3); mBt4 = (ImageView) findViewById(R.id.tab_bt_4); mBt1.setOnClickListener(this); mBt2.setOnClickListener(this); mBt3.setOnClickListener(this); mBt4.setOnClickListener(this); public void onClick(View v) { switch (v.getId()) { case R.id.tab_bt_1: if (null == mFM) mFM = getSupportFragmentManager(); FragmentTransaction ft = mFM.beginTransaction(); FragmentA f0 = new FragmentA(); ft.replace(R.id.content_container, f0); ft.commit(); beak; ... } }
但是replace方法 会重新布局一个fragment,之前在这个fragment上的操作就丢失了。
今天在网上试探各种方法总结一下:
1.用add,然后用hide()和show()控制哪个fragment呈现出来.......我实验没成功....
2.http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0313/1591.html
3.http://www.cnblogs.com/over140/p/3362047.html
4.http://www.cnblogs.com/manuosex/p/3587577.html
最后我还是使用了viewpager,自定义viewpager禁止滑屏
代码1:mainactivity.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#F5F5F5" > <com.ttdevs.lcb.CustomViewPager <!-- 自定义的ViewPager--> android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" /> <RelativeLayout .../> <ImageView... <!-- 一组按钮--> <ImageView... <ImageView... <ImageView... </RelativeLayout> </RelativeLayout>
其中CustomViewPager为自己定义的viewpager,com.ttdevs.lcb是包名
代码2:CustomViewPager.java
package com.ttdevs.lcb; import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; public class CustomViewPager extends ViewPager { private boolean enabled; public CustomViewPager(Context context, AttributeSet attrs) { super(context, attrs); this.enabled = false; } //触摸没有反应就可以了 @Override public boolean onTouchEvent(MotionEvent event) { if (this.enabled) { return super.onTouchEvent(event); } return false; } @Override public boolean onInterceptTouchEvent(MotionEvent event) { if (this.enabled) { return super.onInterceptTouchEvent(event); } return false; } public void setPagingEnabled(boolean enabled) { this.enabled = enabled; } }
代码3:MainActivity.java
public class MainActivity extends FragmentActivity implements OnClickListener { public static final int TAB_Mainpage = 0; public static final int TAB_Msg = 1; public static final int TAB_Search = 2; public static final int TAB_Me = 3; private ViewPager viewPager; private ImageView mBt1, mBt2, mBt3, mBt4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mainactivity); initView(); } private void initView() { viewPager = (ViewPager) findViewById(R.id.viewpager); mBt1 = (ImageView) findViewById(R.id.tab_bt_1); mBt2 = (ImageView) findViewById(R.id.tab_bt_2); mBt3 = (ImageView) findViewById(R.id.tab_bt_3); mBt4 = (ImageView) findViewById(R.id.tab_bt_4); mBt1.setOnClickListener(this); mBt2.setOnClickListener(this); mBt3.setOnClickListener(this); mBt4.setOnClickListener(this); FragmentAdapter adapter = new FragmentAdapter( getSupportFragmentManager()); viewPager.setAdapter(adapter); viewPager.setOffscreenPageLimit(4); //注意,几个Fragment参数就写几个,否则还是不能保存状态 } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tab_bt_1: viewPager.setCurrentItem(TAB_Mainpage); break; case R.id.tab_bt_2: viewPager.setCurrentItem(TAB_Msg); break; case R.id.tab_bt_3: viewPager.setCurrentItem(TAB_Search); break; case R.id.tab_bt_4: viewPager.setCurrentItem(TAB_Me); break; default: break; } } }其中这句
viewPager.setOffscreenPageLimit(4);
你一定不会忘了,我就忘了。然后结果是1,2切换没问题,1,3 1,4 2,3 2,4 切换就发现1的状态又丢失了。这个方法是设置缓冲区fragment页面个数的。。
代码4:FragmentAdapter.java
import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; public class FragmentAdapter extends FragmentPagerAdapter{ public final static int TAB_COUNT = 4; public FragmentAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int id) { switch (id) { case MainActivity.TAB_Mainpage: MainpageFra f0 = new MainpageFra(); return f0; case MainActivity.TAB_Msg: Home2Fra f1 = new Home2Fra(); return f1; case MainActivity.TAB_Search: Home3Fra f2 = new Home3Fra(); return f2; case MainActivity.TAB_Me: SettingFra f3 = new SettingFra(); return f3; } return null; } @Override public int getCount() { return TAB_COUNT; } }
MainpageFra.java 、Home2Fra.java、Home3Fra.java、SettingFra.java就是一般的Fragment,这里不再列出了。
如果照上面的代码fragment状态还是不能保存的请留言。
相关文章推荐
- android fragment+ FragmentTabHost+viewpager 切换状态不保存的问题
- android fragment+ FragmentTabHost+viewpager 切换状态不保存的问题
- android fragment+ FragmentTabHost+viewpager 切换状态不保存的问题
- android fragment+ FragmentTabHost+viewpager 切换状态不保存的问题
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- 安卓笔记android fragment在viewpager中的使用和屏幕切换的状态保存等
- android fragment+ FragmentTabHost+viewpager 切换状态不保存的问题
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- 【转】Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- android fragment+ FragmentTabHost+viewpager 切换状态不保存的问题
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- Android简单的Fragment+Viewpager切换(可滑动和点击切换)
- 【Android】保存Fragment切换状态 FragmentPagerAdapter
- Android:关于Viewpager中的Fragment 滑动时保存状态的问题
- Android开发中如何解决Fragment +Viewpager滑动页面重复加载的问题
- [Android UI开发] viewpager fragment 切换时oncreateview调用多次问题
- android中多个fragment切换时如何避免重复执行onCreateView方法,如何保存上一个fragment的状态
- Android -- ViewPager、Fragment、状态保存、通信
- Android开发笔记之ViewPager+Fragment简单列子的实现