方向更改后,在PagerAdapter中保存EditText的状态

时间:2015-01-14 10:52:09

标签: android orientation-changes android-pageradapter

我努力让我的应用程序在设备方向更改时保留输入EditText的文本。在我的活动类中,我使用ViewPager + PagerAdapter(android.support.v4.view.PagerAdapter)

public class MyActivity extends Activity
{
    ViewPager viewPager;
    PagerAdapter adapter;
    ArrayList<LessonItemI> arrayOfItems;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.pager_main);

        viewPager = (ViewPager) findViewById(R.id.pager);
        adapter = new MyPagerAdapter(this, arrayOfItems);
        viewPager.setAdapter(adapter);

        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener()
        {
            //my code here
        }
    }
}

MyPagerAdapter是:

    public class MyPagerAdapter extends PagerAdapter
    {    
        private Context context;
        private ArrayList<LessonItemI> arrayOfItems;
        private LayoutInflater inflater;

        public MyPagerAdapter(Context context, ArrayList<ItemI> flag)
        {
            this.context = context;
            this.arrayOfItems = flag;
        }
    //overrided methods here
    @Override
    public Object instantiateItem(ViewGroup container, int position)
    {
        final ItemI currentItem = arrayOfItems.get(position);
        View itemView = null;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
}

我会尝试使用MyActivity的onRestoreInstanceStateonSaveInstanceState方法,但我不确定我是否可以从适配器获取EditText字段,它会破坏我的适配器的封装。我正在考虑PagerAdapter的saveStaterestoreState方法,但saveState会返回Parcelable。我是否必须创建实现Parcelable的对象来保存状态?听起来很可怕。 Bundle会好很多但是在PagerAdapter中是不允许的。你们有什么想法如何处理这个?

1 个答案:

答案 0 :(得分:1)

我决定使用片段和FragmentPagerAdapter代替PagerAdapter。我使用了三种片段,但是滑动视图中的整个屏幕数量是10个。所以,我使用相同的片段,内容不同。要在刷卡视图时保留片段状态,请使用viewPager.setOffscreenPageLimit(arrayOfItems.size());。保留方向更改覆盖方法onSaveInstanceState

的片段状态
@Override
public void onSaveInstanceState(Bundle outState)    //when rotated
{
    super.onSaveInstanceState(outState);

    outState.putString("myKey", "myValueToRetain");
}

和onActivityCreated

if (savedInstanceState != null)
{
    String myValue = savedInstanceState.getString("myKey"); 
}