导航抽屉里,办案返回按钮转到previous片段? [英] Navigation drawer, handling the back button to go to previous fragments?

查看:112
本文介绍了导航抽屉里,办案返回按钮转到previous片段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是内置的抽屉式导航运行我的应用程序。我不能完全弄清楚如何处理后退按钮。当它的pressed我希望它再次加载的第一个片段。片段1。

所以当你看到片段1推出的应用程序将启动。然后,他们可以点击片段2-5去其他页面。在所有这些网页我想后退按钮把用户返回到片段1。用户应该能够通过后面的按钮退出应用程序的唯一的地方是片段1。

,因为这一切都通过一个FragmentActivity我试图与后退按钮也搞乱处理。我一直得到一个强制关闭的错误但是:

 (01-11 14:09:33.114:E / AndroidRuntime(8292):android.view.InflateException:二进制XML文件中的行#7:错误充气类片段)
 

这是我到目前为止有:

我已经取得了一定的片段添加到后退堆栈是这样的:

  fm.beginTransaction()代替(R.id.main,newFragment).addToBackStack(fragBack)提交()。
 

后退按钮:

  @覆盖
公共无效onBack pressed(){
    如果(getSupportFragmentManager()。findFragmentByTag(fragBack)!= NULL){

    }
    其他 {
        super.onBack pressed();
        返回;
    }
    如果(getSupportFragmentManager()。getBackStackEntryCount()!= 0){
        Toast.makeText(getApplicationContext(),测试,Toast.LENGTH_LONG).show();
        片段FRAG = getSupportFragmentManager()findFragmentByTag(fragBack)。
        。FragmentTransaction TRANSAC = getSupportFragmentManager()的BeginTransaction()删除(FRAG);
                transac.commit();
    }

}
 

有谁知道我需要做什么?我是否需要调用pssed在每一个片段onBack $ P $(如果这甚至有可能),而不是控制抽屉的FragmentActivity?在我过去的应用程序我已经确定的返回按钮关闭应用程序,无论哪个片段用户上,但一现在我正在做我想要的后退按钮返回到片段1。

真的AP preciate一些帮助,谢谢你。

onItemClick

  @覆盖
        公共无效onItemClick(适配器视图<>适配器视图,视图中查看,INT I,长L){

            片段newFragment =新MapsPage();
            FragmentManager FM = getSupportFragmentManager();
            开关(ⅰ){
            情况下0:
                newFragment =新Fragment2();
                打破;
            情况1:
                newFragment =新Fragment3();
                打破;
            案例2:
                newFragment =新Fragment4();
                打破;
            案例3:
                newFragment =新Fragment5();
                打破;
            }
            。fm.beginTransaction()加(R.id.main,newFragment).addToBackStack(fragback)提交();
            drawerLayout.closeDrawer(RL);
        }
 

解决方案

相反的:

  fm.beginTransaction()代替(R.id.main,newFragment).addToBackStack(fragBack)提交()。
 

电话:

  fm.beginTransaction()加(R.id.main,newFragment).addToBackStack(fragBack)提交()。
 

addToBackStack与作品添加

替换函数删除previous片段,并把新的片段,让你的背部栈中只有一个片段,所有的时间。因此,使用添加功能,以保持previous片段在堆栈中。

要始终转到fragemnt1从任何片段onBack preSS努力做到以下几点:

  getFragmentManager()popBackStack()。
。fm.beginTransaction()加(R.id.main,newFragment).addToBackStack(fragBack)提交()。
 

这将删除最后一笔交易来自backstack并添加新的。 试试这个。

I'm using the built in navigation drawer to run my app. I can't quite figure out how to handle the back button. When it's pressed I want it to load the very first fragment again. Fragment1.

So when the app launches you see Fragment1 launched. They can then click on Fragment 2-5 to go to other pages. Within all of these pages I want the back button to take the user back to Fragment1. The only place the user should be able to exit the app via the back button is Fragment1.

SInce it's all handled by a FragmentActivity I tried messing with the backbutton there. I keep getting a force close error however:

(01-11 14:09:33.114: E/AndroidRuntime(8292): android.view.InflateException: Binary XML file line #7: Error inflating class fragment)

This is what I have so far:

I've made sure to add the fragments to the back stack like this:

fm.beginTransaction().replace(R.id.main, newFragment).addToBackStack("fragBack").commit();

Back button:

@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();
    }

}

Does anyone know what I need to do? Do I need to call onBackPressed in every fragment (if that's even possible) rather than the FragmentActivity that controls the drawer? In my past apps I've been OK with the back button closing the app regardless of which Fragment the user is on but the one I'm making now I want the back button to go back to Fragment1.

Would really appreciate some help, thank you.

onItemClick

@Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            Fragment newFragment = new MapsPage();
            FragmentManager fm = getSupportFragmentManager();
            switch(i) {
            case 0:
                newFragment = new Fragment2();
                break;
            case 1:
                newFragment = new Fragment3();
                break;
            case 2:
                newFragment = new Fragment4();
                break;
            case 3:
                newFragment = new Fragment5();
                break;
            }
            fm.beginTransaction().add(R.id.main, newFragment).addToBackStack("fragback").commit();
            drawerLayout.closeDrawer(rl);
        }

解决方案

Instead of:

fm.beginTransaction().replace(R.id.main, newFragment).addToBackStack("fragBack").commit();

Call:

fm.beginTransaction().add(R.id.main, newFragment).addToBackStack("fragBack").commit();

addToBackStack works with add.

replace function removes previous fragment and places new fragment so on your back-stack there is only one fragment all the time. So use add function to keep previous fragments on stack.

To always goto fragemnt1 from any fragment onBackPress try to do following:

getFragmentManager().popBackStack();
fm.beginTransaction().add(R.id.main, newFragment).addToBackStack("fragBack").commit();

this will remove last transaction from backstack and add new one. Try this.

这篇关于导航抽屉里,办案返回按钮转到previous片段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆