【发布时间】:2014-11-27 09:44:43
【问题描述】:
我正在使用底部的 滑动菜单 和 tab 制作应用程序...整个应用程序是基于 fragment 的..我面临一些问题问题是我正在使用 fragment A 然后单击一个按钮并转到 fragment B,在 Fragment B 中有一个单击按钮片段A的这个按钮将更新为新的值..等等
意味着应该发生从 A->B 的切换..但是 backstack 也应该是维护的..
这是我的 BackStack 代码:
public static void goToFragmentWithBackStack(Fragment fragment) {
Fragment tmp = fm.findFragmentByTag(fragment.getClass().getName());
if (tmp != null && tmp.isVisible())
return;
ft = fm.beginTransaction();
ft.add(R.id.content_frame, fragment, fragment.getClass().getName());
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
currentTag = fragment.getClass().getName();
}
这里我只用这个方法去下一个片段。并且后退按钮已经被活动的后退所维护。 当我使用此方法并再次调用 Fragment A(已经在容器中)时,它不会被调用......如果我使用 gotoFragment 方法,它会被调用,但是旧的 Fragment A 被销毁(会出现黑屏)。这是我的 gotoFragment 方法:
public static void goToFragment(Fragment fragment) {
Fragment tmp = fm.findFragmentByTag(fragment.getClass().getName());
if (tmp != null && tmp.isVisible())
return;
ft = fm.beginTransaction();
ft.replace(R.id.content_frame, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
currentTag = fragment.getClass().getName();
Log.d("Trong", "BackPressedcurrentTag " + currentTag);
}
我已经使用这个概念来重用使用过的片段:Android - Instantiate a Fragment multiple times
但这无济于事。让我再次解决我的问题:
我想在容器中一次又一次地使用使用过的片段,并且所有片段也应该在后按时调用
流程应该是这样的:A->B->A->B->A AND on backpressed:A
请帮助我。在此先感谢。
fragment ..I 的新实例是这样的:
public static FollowerFragment newInstance() {
return new FollowerFragment(null,null,null);
}
public static Fragment newInstance(String cat_id,String status,String id) {
return new FollowerFragment(cat_id,status,id);
}
public FollowerFragment(String cat_id,String status,String id) {
// TODO Auto-generated constructor stub
this.str_status=cat_id;
this.counter = status;
this.user_id = id;
}
【问题讨论】:
-
为每个片段创建一个新实例。看起来您正在使用每个中的 1 个并来回切换
-
感谢您的回复,但我已经在它们之间切换了无数次(如用户所愿),那么在这种情况下,我必须制作很多实例..但如果您认为有可能,请解释我的代码..
-
你想太多了,真的没那么难。如果你让它自己处理,你不需要跟踪 backstack。您需要做的就是创建任何片段的新实例并将当前片段替换为新片段。我也无法用代码解释你和你作为人类的存在(还没有!),对不起
-
我确信您会创建一个并尝试重用它,这很好,但您也希望旧数据保留在后台堆栈上的回收片段中。如果我是边锋,请有人纠正我,但这似乎不合逻辑。
-
先生,请分享任何代码。我会试试的
标签: android android-fragments fragment