我努力让我的应用程序在设备方向更改时保留输入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的onRestoreInstanceState
和onSaveInstanceState
方法,但我不确定我是否可以从适配器获取EditText字段,它会破坏我的适配器的封装。我正在考虑PagerAdapter的saveState
和restoreState
方法,但saveState
会返回Parcelable。我是否必须创建实现Parcelable的对象来保存状态?听起来很可怕。 Bundle会好很多但是在PagerAdapter中是不允许的。你们有什么想法如何处理这个?
答案 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");
}