I have an Activity with a ViewPager containing Fragments. the first fragment(book) create a nested fragment(singlebook) when click a button on it. Problem is that the first fragment and its component are gone when i came back from fragment3. I think it is related onSaveState or onDestroy.
I've tried Override onDestroy and used childFragmentManager on parent fragment(book) but it doesn't add to back stack.
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;
}
}
viewPager = (ViewPager) findViewById(R.id.vp_12);
adapter = new MyPagerAdapter(fragmentManager, fragments);
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
To
viewPager = (ViewPager) findViewById(R.id.vp_12);
viewPager.setOffscreenPageLimit(3);
adapter = new MyPagerAdapter(getChildFragmentManager(), fragments);
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);