用ViewPager保存/恢复片段状态的正确方法是什么

时间:2019-08-28 18:25:33

标签: java android android-fragments android-viewpager android-tabactivity

我正在使用Android Studio中的选项卡式活动模板。我目前在主要活动中设置了3个片段。在第一个标签中,我想在TextView中保存和还原字符串数据。

我确实尝试过使用onSaveInstanceState将数据放入状态包中,并从片段的onActivityCreated生命周期中还原它。 如果我只滑动1页,它确实可以正常工作,但是如果我滑动到第三页然后又滑回到第一页,则停止工作。

我还搜索了一种解决方法是设置

ViewPager.setOffScreenPageLimit(#ofpageyouwanted)

好吧,我尝试了此解决方案,它正在工作。但我怀疑这是否是正确的方法。我的活动中只有3个标签/片段,但是如果我有10个或更多,这仍然是正确的方法吗?

//code of my fragment
public class myTab1Frag extends Fragment{
...

//restore the data 
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    //restore the feedback value
    if (savedInstanceState != null){
        feedback.setText(savedInstanceState.getString("FEEDBACK_DATA"));
    }
}

...
//save fragment data
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);
    //save the feedback value
    outState.putString("FEEDBACK_DATA", feedback.getText().toString());
}

}

//the code in my Main_Activity that contains ViewPager
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    SectionsPagerAdapter sectionsPagerAdapter = new 
    SectionsPagerAdapter(this, getSupportFragmentManager());
    ViewPager viewPager = findViewById(R.id.view_pager);
    viewPager.setAdapter(sectionsPagerAdapter);

    //this is the code to tell viewpager NOT destroy the fragment
    viewPager.setOffscreenPageLimit(2);

    TabLayout tabs = findViewById(R.id.tabs);
    tabs.setupWithViewPager(viewPager);

}

同样,我知道停止viewpager破坏片段的方法,我想知道当有更多标签/片段时,这样做是否是正确的方法。 如果没有,正确的方法是什么?

0 个答案:

没有答案