我正在使用内置的导航抽屉来运行我的应用程序.我无法弄清楚如何处理后退按钮.当它被按下时,我希望它再次加载第一个片段.片段1.
因此,当应用程序启动时,您会看到Fragment1已启动.然后,他们可以点击片段2-5转到其他页面.在所有这些页面中,我希望使用后退按钮将用户带回Fragment1.用户应该能够通过后退按钮退出应用程序的唯一位置是Fragment1.
所有这些都是由FragmentActivity处理的,我试着弄乱那里的后门按钮.然而,我一直收到一个强制关闭错误:
(01-11 14:09:33.114: E/AndroidRuntime(8292): android.view.InflateException: Binary XML file line #7: Error inflating class fragment)
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止:
我确保将片段添加到后台堆栈中,如下所示:
fm.beginTransaction().replace(R.id.main, newFragment).addToBackStack("fragBack").commit();
Run Code Online (Sandbox Code Playgroud)
返回键:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().findFragmentByTag("fragBack") != null) {
}
else {
super.onBackPressed();
return;
}
if (getSupportFragmentManager().getBackStackEntryCount() != 0) {
Toast.makeText(getApplicationContext(), "Test", Toast.LENGTH_LONG).show();
Fragment frag = getSupportFragmentManager().findFragmentByTag("fragBack");
FragmentTransaction transac = getSupportFragmentManager().beginTransaction().remove(frag);
transac.commit();
}
}
Run Code Online (Sandbox Code Playgroud)
有谁知道我需要做什么?我是否需要在每个片段中调用onBackPressed(如果可能的话),而不是控制抽屉的FragmentActivity?在我过去的应用程序中,无论用户使用哪个片段,我都可以使用后退按钮关闭应用程序但是我现在正在制作的那个片段我希望后退按钮返回到Fragment1.
非常感谢一些帮助,谢谢.
onItemClick
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Fragment newFragment = new MapsPage();
FragmentManager fm = getSupportFragmentManager(); …Run Code Online (Sandbox Code Playgroud) android android-fragments android-fragmentactivity navigation-drawer
我有三个片段F1 F2 F3 F4都可以从侧边栏访问.
所有四个都可以随时以任何顺序调用,
现在我想要,如果F1已经被点击(创建)然后再也没有创建F1,而只是使用片段管理器将片段F1带回到前面.所有其他片段都一样
到目前为止,我为容器中的每个碎片尝试了这个(碎片活动)
if (fragmentManager.findFragmentByTag("apps")==null) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
Fragment newFragment = new CategoriesFragment();
transaction.replace(R.id.content_frame, newFragment, "apps");
transaction.addToBackStack("apps");
transaction.commit();
} else{
}
Run Code Online (Sandbox Code Playgroud)
Ifpart确保我重新创建了NO片段(如果已经创建了它),但是我应该在什么else部分写入,以便已经创建的片段可以在View Hierarchy中显示出来
请帮忙,我坚持了2天.
我需要一些帮助.以这种方式将片段添加到活动中.问题是每次调用openFragment时都会创建片段并添加.这很明显.问题:我做了什么修改,所以它只能添加片段一次.在具有相同片段标签的下一次调用中,它将无效.
case:第一次按下按钮添加片段并显示.我再次按下相同的按钮它没有任何反应.
public static void openFragment(Activity activity, Fragment fragment) {
FragmentManager fragmentManager = ((ActionBarActivity) activity)
.getSupportFragmentManager();
FragmentTransaction ftx = fragmentManager.beginTransaction();
ftx.addToBackStack(fragment.getClass().getSimpleName());
ftx.setCustomAnimations(R.anim.slide_in_right,
R.anim.slide_out_left, R.anim.slide_in_left,
R.anim.slide_out_right);
ftx.add(R.id.main_content, fragment);
ftx.commit();
}
Run Code Online (Sandbox Code Playgroud) stack android android-fragments android-fragmentactivity fragmentmanager
我有一个Activity与三个片段可以打电话给他们一个,乙和Ç.Fragment 一个被称为在活动onCreate().
FragmentA fragA = new FragmentA();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.activity2_layout, fragA, "A");
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
当按下某些按钮时,会被片段B或C替换,并且FragmentTransaction会调用addToBackStack().
FragmentB fragB = new FragmentB(); //or C
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.activity2_layout, fragB, "B"); //or C
transaction.addToBackStack("B"); //or C
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
但是让我说我连续三次打电话给Fragment B,我怎么能阻止它自己堆叠呢?同时我希望这是可能的:B调用> C调用> B调用 - 但是当我尝试返回时我希望B只打开一次(C < B)而不是(B < C < B) .所以基本上删除第一个backStack与新的.
android fragment android-fragments back-stack fragment-backstack
我想避免在这个导航用例中:A - > B - > A - > B - > A - > B ...
所有片段实例都保存在后栈中.原因:避免内存不足错误.
我尝试创建一个自己的导航工作流程,如下所述:https://stackoverflow.com/questions/18041583/fragments-backstack-issue?noded = 1#comment26393904_18041583(应该模仿活动行为,在启动后始终调用finish()一个新的,同时只允许导航堆栈中的第一个(主页).但它似乎是非常错误或不可理解的.
所以我也想,实现像活动"带到前面"标志的行为.但我不知道该怎么做.也许是popBackStack的东西 - 但我不知道如果交易已经在后台,如何询问片段.而且我不知道我是否走在正确的道路上.
这应该是一个非常标准的任务,因为每个导航菜单基本上都有这个问题.但是,似乎还没有直接实施,也无法找到有关它的信息.
任何的想法?