我正在使用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破坏片段的方法,我想知道当有更多标签/片段时,这样做是否是正确的方法。 如果没有,正确的方法是什么?