I am trying to create custom tab navigation. On click on each tab, it will replace fragment in screen. On MainActivity.java, I am creating one copy of each fragment (I think, in this way, I can use one copy of each fragment everywhere).
public static WhereRootFragment whereRootFragment;
public static FeedRootFragment feedRootFragment;
public static WhereMainFragment whereMainFragment;
public static FeedMainFragment feedMainFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
.....
whereRootFragment=new WhereRootFragment();
feedRootFragment=new FeedRootFragment();
whereMainFragment=new WhereMainFragment();
feedMainFragment=new FeedMainFragment();
ClickHandler.handleClick(MainActivity.this, llWhere);
}
When tab button was clicked, it replaces old fragment with current fragment(handleClick method).
switch (tag) {
case TAG_WHERE:
MainActivity.ivWhere.setImageDrawable(a.getResources().getDrawable(
R.drawable.where_black));
// Fragment fragment_where_root=new WhereRootFragment();
FragmentTransaction transaction_where = ((FragmentActivity) a).getSupportFragmentManager().beginTransaction();
transaction_where.replace(R.id.root_frame, MainActivity.whereRootFragment);
transaction_where.addToBackStack(null);
transaction_where.commit();
break;
case TAG_FEED:
MainActivity.ivFeed.setImageDrawable(a.getResources().getDrawable(
R.drawable.feed_black));
// Fragment fragment_feed_root=new FeedRootFragment();
FragmentTransaction transaction_feed = ((FragmentActivity) a).getSupportFragmentManager().beginTransaction();
transaction_feed.replace(R.id.root_frame, MainActivity.feedRootFragment);
transaction_feed.addToBackStack(null);
transaction_feed.commit();
break;
WhereRootFragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
/* Inflate the layout for this fragment */
View view = inflater.inflate(R.layout.fragment_where_root, container, false);
FragmentTransaction transaction = getFragmentManager()
.beginTransaction();
transaction.replace(R.id.where_root_frame, MainActivity.whereMainFragment);
transaction.addToBackStack(null);
transaction.commit();
return view;
}
WhereMainFragment
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_where_main,
container, false);
return rootView;
}
Result:
[StartApp]->[1.Where:showing]->[2.Feed:showing]->[3.Where:it is not showing]->[4.Feed: showing saved state]->[5.Another fragment: it is empty as supposed]->[6.Feed:not showing]
Question: how to solve this problem? how to make fragment save its state?