当前位置: 首页 > 知识库问答 >
问题:

Navigation DrawerLayout按钮永远不会更改为back按钮并且不会导航

全流觞
2023-03-14

我正在使用DrawerLayout,并在用户每次从drawer菜单中点击一个项目时添加一个新的片段。这很管用。

在其中一个片断中,用户可以导航到另一个片断:

private void loadArchives() {

    PUCNewsArchive news_archive = new PUCNewsArchive();

    getFragmentManager()
    .beginTransaction()
    .add(R.id.container_frame, news_archive, "news_archives")
    .addToBackStack(null)
    .commit();

}

这将正确地向堆栈中添加另一个片段。但是,它不会将操作栏抽屉按钮/图标更改为后退按钮。所以,在敲击那只是再次打开抽屉,这是不应该做的。返回的唯一方法是use The hardware back按钮,它返回到前面的fragment。我尝试将以下内容添加到我的主活动中,以查看发生了什么:

@Override
public void onBackPressed(){
    FragmentManager fm = getFragmentManager();
    if (fm.getBackStackEntryCount() > 0) {
        Log.i("MainActivity", "popping backstack");
        fm.popBackStack();
    } else {
        Log.i("MainActivity", "nothing on backstack, calling super");
        super.onBackPressed();
    }
}

但是只有当我使用硬件后退按钮时才会调用它,因为抽屉按钮只会打开抽屉。

我想这应该是检查它是否应该打开抽屉或导航:

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    switch(item.getItemId()) {
    case android.R.id.home:

        return true;
    default:
        return super.onOptionsItemSelected(item);
    }

}

我错过了什么?为什么抽屉按钮从来没有变成后退按钮,也没有像后退按钮一样?

共有1个答案

须峰
2023-03-14

您不需要使用onBackPressed()

我在我的应用程序中也遇到过非常类似的情况。下面是我如何工作的:

我在主活动中创建了一个方法:

public void foo(int fragment_id) {
        if(fragment_id == some_id){
            // keep the drawer carat
            mDrawerToggle.setDrawerIndicatorEnabled(true);
        }else{
            // Disable the  drawer carat, and enable the back button
            mDrawerToggle.setDrawerIndicatorEnabled(false);
            getActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

我从每个片段的onResume()调用该方法,并将特定片段ID传递给它。或者,您可以从主活动中的loadFragment()/loadArchive()方法调用它。这对我来说很管用。

 类似资料:
  • 我需要在商品搜索中键入“香蕉”,然后点击“GO”按钮。 在堆栈溢出的帮助下,我可以调出火狐,输入“香蕉”...但是“Go”按钮(基于检查的Go3)不会开火!! 我试过element.click(),试过ActionChains,试过将光标移动到元素,试过验证它已经启用。它只是不会转到下一个搜索页面。 我没有得到任何错误...它只是没有进入下一页。 谢谢你能提供的任何帮助。快把我逼疯了!

  • 所以我有这些按钮(3叠6个,18个),我想实现的是当我按下其中一个按钮时: > 边框颜色 其他按钮将重置为其正常样式 但是我不想通过“isEnable”技巧禁用其他的(我只在这里找到了涉及isEnable的解决方案),我仍然希望它们被启用,我只是希望它们不要在按下时被我的自定义样式“突出显示”。 对于第一部分,也就是我在IBAction中所做的造型: 这一小部分只是一个按钮,但我想如果我有18个按

  • 我能找到的每个更改按钮图像的示例都显示了当单击该按钮时如何更改它。但是我如何点击一个切换按钮,并让它改变一个常规按钮的图像呢? 关于更多细节,我有两个按钮和一个onCheckedChanged事件: 当按下切换按钮并发生onCheckedChanged事件时,我需要将btn1的背景设置为新图像。

  • 我有两项活动。其中一个有碎片<从这个片段中,我可以转到另一个活动,但单击“主页”按钮,它会转到上一个活动,而不是转到上一个活动的片段。 图像

  • 在我的应用程序中,我使用动作栏和导航抽屉。操作栏中有一个按钮用于打开和关闭导航抽屉。我想把它的颜色改成红色。我该怎么做?

  • 所以我试图让我的按钮在我的导航抽屉碎片中打开新的活动,但是我的mainactivity中有什么东西坏了。java 我的mainactivity.java.... 我的奖励碎片... } 问题是它在下有一个红色下划线,我不知道如何修复它 我试过了所有的办法,这就是我目前所拥有的… } 我的setContentView是鲜红的,我的findViewByID是红色的,最后是(rewardsFragmen