簡體   English   中英

方向更改后在PagerAdapter中保存EditText的狀態

[英]Save state of EditText in PagerAdapter upon orientation change

我努力使我的應用程序保留更改設備方向時輸入到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);
    }
}

我會嘗試使用onRestoreInstanceStateonSaveInstanceState方法,但不確定是否可以從適配器獲取EditText字段,而且它破壞了適配器的封裝。 我正在考慮PagerAdapter的saveStaterestoreState方法,但saveState返回Parcelable。 是否需要創建實現Parcelable的對象以保存狀態? 聽起來糟透了。 捆綁會更好,但是PagerAdapter不允許這樣做。 你們有什么想法如何處理嗎?

我決定使用fragments和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"); 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM