【Android开发日记】Fragment切换如何保存状态?Viewpager简单搞

一组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.

3.

4.

最后我还是使用了viewpager,自定义viewpager禁止滑屏

代码1:mainactivity.xml

<RelativeLayout xmlns:android=""xmlns: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;}//触摸没有反应就可以了@Overridepublic boolean onTouchEvent(MotionEvent event) {if (this.enabled) {return super.onTouchEvent(event);}return false;}@Overridepublic 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;@Overrideprotected 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参数就写几个,否则还是不能保存状态}@Overridepublic 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);}@Overridepublic 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;}@Overridepublic int getCount() {return TAB_COUNT;}}MainpageFra.java 、Home2Fra.java、Home3Fra.java、SettingFra.java就是一般的Fragment,这里不再列出了。

如果照上面的代码fragment状态还是不能保存的请留言。

版权声明:本文为博主原创文章,未经博主允许不得转载。

,人生好如足球赛,看自家总是无奈,对人家总是优待,

【Android开发日记】Fragment切换如何保存状态?Viewpager简单搞

相关文章:

你感兴趣的文章:

标签云: