【发布时间】:2019-07-31 04:22:08
【问题描述】:
我有一个包含片段的 ViewPager 的 Activity。 第一个片段(书)在单击按钮时创建一个嵌套片段(单本)。 问题是当我从 Fragment3 回来时,第一个 Fragment 及其组件都消失了。我认为它与 onSaveState 或 onDestroy 有关。
我尝试过 Override onDestroy 并在父片段(书)上使用 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;
}
}
【问题讨论】:
-
您是否尝试使用父 FragmentManager 添加新片段?
-
你试过 viewPager.setOffscreenPageLimit(3);其中 3 是您的页数
-
有效!非常感谢!
-
@MrazJason 如果您发现此评论有帮助,请标记为支持。它也会帮助其他人
-
如何投票?我很新这个网站。我真的很感激。我在哪里可以找到赞成标记?...
标签: android android-viewpager fragment ondestroy