【发布时间】:2016-03-08 18:35:45
【问题描述】:
我已经为此寻找解决方案已有一段时间了。所以这就是我想要实现的目标。我有一个使用以下菜单实现的 NavigationDrawer:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_dashboard"
android:icon="@drawable/ic_dashboard"
android:title="Dashboard" />
<item
android:id="@+id/nav_logbook"
android:icon="@drawable/ic_logbook"
android:title="Logbook" />
<item
android:id="@+id/nav_context"
android:icon="@drawable/ic_context"
android:title="Context" />
</group>
</menu>
当有新的上下文要添加时,我想通过在括号之间添加新更新的数量来在导航抽屉中向用户展示它。例如:Context (2) 当有两个新更新时。
我想在每次打开抽屉时检查这个,但最好只检查一次,因为它背后有一个相当繁重的 SQL 查询。我知道我可以使用onDrawerOpened() 和onDrawerClosed(),但我不喜欢这个解决方案,因为只有当抽屉完全打开时,数字才会突然更新。所以它会保持一个数字,直到它完全打开,然后它会改变。这看起来很傻。所以这就是为什么我想在导航抽屉开始打开时更改一次。我发现没有像样的状态可以与侦听器进行检查,因为只有 STATE_IDLE、STATE_DRAGGING 或 STATE_SETTLING,并且没有指定何时打开和关闭,只是拖动和设置。
此外,我还希望将片段上下文的标题保留为“上下文”,而不是更改为“上下文 (2)”。这发生在我当前的代码中:
mToggle = new ActionBarDrawerToggle(
this,
mDrawer,
mToolbar,
R.string.drawer_open,
R.string.drawer_close
){
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
super.onDrawerSlide(drawerView, slideOffset);
if (slideOffset != 0) {
Log.i(TAG, "onDrawerSlide() in update amount");
int amount = db.getAmountNoContext();
String sourcestring = "Context <b>(" + amount + ")</b>";
mNavigationView.getMenu().getItem(2).setTitle(Html.fromHtml(sourcestring));
}
}
};
这适用于更改导航抽屉中的菜单标题,但它也会连续多次调用,因为偏移量不断变化。这是因为 SQL 查询不理想。我还尝试将其设置为特定的浮点值,例如 0.01,但它没有被触发。另外我想提醒一下,当导航抽屉关闭时,我想将菜单标题改回来,所以 ActionBar 中的片段标题只是说“上下文”。我已经完成了我的研究,但似乎我只是有一个非常具体的问题?也许你们中的一个人有一个想法。提前致谢。
【问题讨论】:
标签: android android-fragments navigation-drawer