小编dra*_*ity的帖子

在没有虚拟项目或反射的情况下取消选中底部导航视图中的所有项目

我正在尝试使用设计库中的 BottomNavigationView。一切正常,除了我希望每个导航项目都开始一个活动,因此我想取消选中导航中的所有项目,使它们看起来相同。我尝试了几种解决方案,其中大部分都不起作用,最后一个确实有效,但感觉很hacky。

首先我这样做:

ViewGroup nav = (ViewGroup) bottomNav;
for(int i=0; i < nav.getChildCount(); i++) {
    nav.getChildAt(i).setSelected(false);
}
Run Code Online (Sandbox Code Playgroud)

这似乎什么也没做。

然后我尝试:

int size = bottomNav.getMenu().size();
for (int i = 0; i < size; i++) {
    bottomNav.getMenu().getItem(i).setChecked(false);
}
Run Code Online (Sandbox Code Playgroud)

这仅检查了最后一项而不是第一项。

最后我尝试在菜单中添加一个虚拟项目并执行以下操作:

bottomNav.getMenu().findItem(R.id.dummmy_item).setChecked(true);
bottomNav.findViewById(R.id.dummmy_item).setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)

这几乎有效,但它隐藏了下面的标题,在我的情况下这对上下文很重要。

然后我找到了这个答案:https : //stackoverflow.com/a/41372325/4888701并编辑了我上面的解决方案以包含它。具体来说,我添加了 proguard 规则,我使用了那个确切的帮助器类并调用了该方法。它看起来正确,似乎有效。但对我来说感觉hacky,因为:

  1. 我正在使用一个虚拟菜单项来不允许检查任何可见的项目
  2. 它为应该是一个小的视觉修复添加了相当多的代码。
  3. 我之前读过,如果可能的话,应该避免反射。

有没有其他更简单的方法来实现这一点,或者这是我们当前版本的库中最好的方法?

(作为旁注,我想知道此解决方案中的 proguard 规则是否必要以及它的作用是什么?我对 proguard 一无所知,但该项目是从启用它的其他人那里继承的。)

android android-proguard bottomnavigationview

5
推荐指数
2
解决办法
2318
查看次数

当你没有使用unbind()时会发生什么?

我有一个应用程序,我使用Butterknife,最近我发现了一个片段,我没有unbinder.unbind()在片段中调用onDestroyView().我解决了这个问题,但这让我开始思考.

这会导致什么样的错误?为什么?我现在没有特别的错误,但我想知道将来要注意什么,并且图书馆的网站没有说明这可能导致的问题.

android android-layout android-view butterknife

5
推荐指数
1
解决办法
198
查看次数