【发布时间】:2014-08-26 06:12:57
【问题描述】:
我正在尝试创建自定义标签导航。单击每个选项卡时,它将替换屏幕中的片段。在 MainActivity.java 上,我正在为每个片段创建一个副本(我认为,通过这种方式,我可以在任何地方使用每个片段的一个副本)。
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);
}
当标签按钮被点击时,它用当前片段替换旧片段(handleClick方法)。
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;
}
结果:
[StartApp]->[1.Where:showing]->[2.Feed:showing]->[3.Where:不显示]->[4.Feed:显示保存状态]->[ 5.另一个片段:应该是空的]->[6.Feed:不显示]
问题:如何解决这个问题?如何让fragment保存状态?
【问题讨论】:
-
从 onClick 事件中移除
transaction_feed.addToBackStack(null);。 -
@PratikButani,我已经按照你说的尝试过,但没有帮助
-
在
WhereRootFragment而不是getFragmentManager使用getChildFragmentManager, asWhereMainFragment` 是WhereRootFragment的子级。
标签: java android android-fragments