我有一个包含片段的ViewPager活动。当单击一个按钮时,第一个片段(Book)创建一个嵌套的片段(Singlebook)。问题是,当我从fragment3回来时,第一个片段及其组件就消失了。我认为这与onSaveState或onDestroy有关。
我已经尝试过重写onDestroy,并在父片段(Book)上使用了childFragmentManager,但是它没有添加到后台堆栈。
MainActivity.java :
public class MainActivity extends FragmentActivity {
ViewPager viewPager;
MyPagerAdapter adapter;
public FragmentManager fragmentManager = getSupportFragmentManager();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tl_tabs);
viewPager = (ViewPager) findViewById(R.id.vp_12);
Fragment[] fragments = new Fragment[3];
fragments[0] = new Book();
fragments[1] = new Search();
fragments[2] = new Study();
adapter = new MyPagerAdapter(fragmentManager, fragments);
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
}
}
class MyPagerAdapter extends FragmentStatePagerAdapter {
private Fragment[] fragments;
public MyPagerAdapter(FragmentManager fm, Fragment[] fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return fragments[0];
case 1:
return fragments[1];
case 2:
return fragments[2];
default:
return fragments[0];
}
}
@Override
public int getCount() {
return fragments.length;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "단어장";
case 1:
return "단어 검색";
case 2:
return "내 정보";
default:
return "";
}
}
}Book.java :
public class Book extends Fragment {
FragmentManager fragmentManager;
private Button btn;
private EditText editText;
public Book() {
// Required empty public constructor
}
@Override
public View onCreateView( LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_book, container, false);
btn = (Button) view.findViewById(R.id.btn_toQuiz);
editText =(EditText) view.findViewById(R.id.edit_text);
ViewPager viewPager = (ViewPager) container;
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fragmentManager = getChildFragmentManager();
fragmentManager.beginTransaction()
.add(R.id.fl_BookContainer,new singleBook(),"TAG")
.addToBackStack(null)
.commit();
}
});
return view;
}
}发布于 2019-07-31 04:58:25
viewPager = (ViewPager) findViewById(R.id.vp_12);
adapter = new MyPagerAdapter(fragmentManager, fragments);
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);至
viewPager = (ViewPager) findViewById(R.id.vp_12);
viewPager.setOffscreenPageLimit(3);
adapter = new MyPagerAdapter(getChildFragmentManager(), fragments);
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);发布于 2019-07-31 04:49:03
默认情况下,FragmentStatePagerAdapter只能创建两个片段,当您转到第三个片段时,它将删除第一个片段。因此,您需要调用setOffscreenPageLimit方法来保存所有片段,这些片段在将适配器设置为视图寻呼机时添加到寻呼机适配器中。
Fragment[] fragments = new Fragment[3];
fragments[0] = new Book();
fragments[1] = new Search();
fragments[2] = new Study();
adapter = new MyPagerAdapter(fragmentManager, fragments);
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(fragments.size());
tabLayout.setupWithViewPager(viewPager);https://stackoverflow.com/questions/57283137
复制相似问题