在方向更改时在 PagerAdapter 中保存 EditText 的状态
Save state of EditText in PagerAdapter upon orientation change
我正在努力让我的应用程序在设备方向更改时保留输入到 EditText 中的文本。在我的 activity class 中,我使用 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
returns Parcelable。我是否必须创建实现 Parcelable 的对象来保存状态?听起来很糟糕。捆绑会好得多,但在 PagerAdapter 中不允许这样做。你们有什么想法如何处理这个吗?
我决定使用片段和 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");
}
我正在努力让我的应用程序在设备方向更改时保留输入到 EditText 中的文本。在我的 activity class 中,我使用 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
returns Parcelable。我是否必须创建实现 Parcelable 的对象来保存状态?听起来很糟糕。捆绑会好得多,但在 PagerAdapter 中不允许这样做。你们有什么想法如何处理这个吗?
我决定使用片段和 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");
}