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

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

3.

4.

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

代码1:mainactivity.xml

xmlns:tools=""

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#F5F5F5" >

android:id="@+id/viewpager"

android:layout_width="match_parent"

android:layout_height="match_parent" />

.../>

其中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状态还是不能保存的请留言。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值