gpt4 book ai didi

android - 为什么我的 Navigation Drawer 认为它已关闭但在旋转后仍保持打开状态?

转载 作者:行者123 更新时间:2023-11-29 14:15:02 26 4
gpt4 key购买 nike

我目前正在我的应用程序中实现抽屉导航。一切正常,但我遇到了一个问题,抽屉在我旋转设备后认为它已关闭,尽管它仍然可见。以下是说明问题的几个屏幕截图:

轮换前: Before Rotation

旋转后: After Rotation

History 是我在打开抽屉之前正在查看的部分的标题。我在 onSaveInstanceState() 中保留 ActionBar 标题并在 onCreate() 中恢复它,但是我用来设置标题的函数应该将标题设置为抽屉打开时的应用名称:

private void setTitle(String title)
{
gSectionTitle = title;
TextView actionBarTitle = (TextView) findViewById(R.id.action_bar_title);

if(actionBarTitle != null)
{
// Only set a title if we're looking at History or if the Navigation Drawer is open
Boolean navDrawerOpen = gNavDrawerLayout.isDrawerOpen(gNavDrawerList);

// DEBUG
Log.i(TAG, "navDrawerOpen: " + navDrawerOpen + ", section: " + gSection + ", section title: " + gSectionTitle);

if(navDrawerOpen)
{
actionBarTitle.setText(gNavDrawerTitle);
}
else if(gSection == SECTION_HISTORY)
{
actionBarTitle.setText(gSectionTitle);
}
else
{
actionBarTitle.setText("");
}
}
}

(我使用自定义 ActionBar 布局,所以我不能只使用 getActionBar().setTitle()。)

您会注意到我在该函数中有一个 Log.i() - 这是打开抽屉导航时的内容(如第一张图片所示):

navDrawerOpen:true,部分:1,部分标题:gSho

这是它在旋转后被调用时所说的内容(如第二张图片所示):

navDrawerOpen:false,部分:1,部分标题:历史

如您所见,Navigation Drawer 保持打开状态,但应用认为它已关闭,因此它恢复了当前可见部分的标题。我遵循了 Navigation Drawer 教程并记得设置 onPostCreate()onConfigurationChanged():

@Override
protected void onPostCreate(Bundle savedInstanceState)
{
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
gNavDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
gNavDrawerToggle.onConfigurationChanged(newConfig);
}

这里没有什么特别的,但是我的 ActionBarDrawerToggle 都是一样的:

// Change the ActionBar whenever the drawer is opened or closed
gNavDrawerToggle = new ActionBarDrawerToggle(this, gNavDrawerLayout, R.drawable.ic_drawer, R.string.app_name, R.string.app_name)
{
@Override
public void onDrawerOpened(View drawerView)
{
// As per navigation drawer guidelines, show the app name and hide elements on the ActionBar
setTitle(gNavDrawerTitle);
invalidateOptionsMenu();
}

@Override
public void onDrawerClosed(View drawerView)
{
setTitle(gSectionTitle);
// Show hidden Action Bar elements
invalidateOptionsMenu();
}
};

上面的代码工作正常直到我旋转我的设备,此时错误的标题被恢复到 ActionBar,因为它认为 Navigation Drawer 在它仍然打开时已关闭。我在这里做错了什么?

最佳答案

您在 DrawerLayout 有足够的时间进行布局之前调用它。您可以在 DrawerLayout 上调用 View.post,然后将其记录到 Runnable 中。

关于android - 为什么我的 Navigation Drawer 认为它已关闭但在旋转后仍保持打开状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22080467/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com