方法setDrawerListener已经被弃用。

230

我在使用我的应用程序时发现应用程序的导航抽屉变小了,但我没有对其进行任何操作。

navigation drawer

然后,在检查代码后,我发现setDrawerListener已被弃用。有人有解决方法吗?

drawerLayout.setDrawerListener(actionBarDrawerToggle);

9
被弃用的代码可能与抽屉尺寸无关。这意味着它们将来会停止支持它(指特定的方法)。它可能会被一个addDrawerListener替换,但我不确定。 - chRyNaN
我明白了,但是我并没有看到任何问题,我只是创建了一个新的片段,它没有连接在那个抽屉上...真的不太明白为什么会发生这种事情... - david glorioso
你使用的是哪个库的版本? - Amit Vaghela
我正在使用以下依赖库:compile 'com.android.support:appcompat-v7:23.2.0',compile 'com.android.support:design:23.2.0',compile 'com.android.support:support-v4:23.2.0'。 - david glorioso
5个回答

764

请使用addDrawerListener()替代。


7
为了API的一致性,他们添加了removeDrawerListener()方法,因此将add...命名以匹配它。 - Marcin Orlowski
29
至少他们可以在弃用信息中加入“请使用'addDrawerListener'代替”! - AaA
1
那么...我们可以添加多个抽屉监听器吗? - Kenny Worden

87
替换:
drawer.setDrawerListener(...);
drawer.addDrawerListener(...);

public void setDrawerListener(DrawerLayout.DrawerListener listener) 设置一个监听器以便接收抽屉事件的通知。

请注意,此方法已被弃用,您应该使用addDrawerListener(DrawerLayout.DrawerListener)添加侦听器,并使用removeDrawerListener(DrawerLayout.DrawerListener)删除已注册的侦听器。


18
我们应该在哪里移除抽屉监听器?这是否必要? - portfoliobuilder
@portfoliobuilder 这要看情况。一般来说,这并不是必须的。如果您在 onCreate() 中设置它,并且您旋转屏幕,则整个活动将被重新创建并设置新的侦听器。更复杂的情况应该考虑到(可能)没有必要为 DrawerLayout 设置超过1个侦听器。 - Johnny Five

30

替换setDrawerListener

drawerLayout.setDrawerListener(actionBarDrawerToggle);

使用 addDrawerListener 方法

drawerLayout.addDrawerListener(actionBarDrawerToggle);

例子

  DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                    this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
            assert drawer != null;
            drawer.addDrawerListener(toggle);
            toggle.syncState();

            NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
            assert navigationView != null;
            navigationView.setNavigationItemSelectedListener(this);

22

我想我要回答我的问题了。最新的navigationView在选择"wrap_content"时会在几乎18dp的位置上生成其默认的android:layout_height。所以,你必须选择你想要的navigationViewandroid:layout_height或者简单地将其设置为android:layout_height="match_parent"

<android.support.design.widget.NavigationView
    android:layout_width="320dp"
    android:layout_height="550dp"
    android:id="@+id/navigation_view_admin"
    android:layout_gravity="start">

</android.support.design.widget.NavigationView>

无论如何,当你在导航抽屉中添加一个项目时,它的高度会自动增加。

最后,像Luxi Liu所说的那样,使用addDrawerListener()而不是setDrawerListener()


6
因为那不是我的主要问题。你能看到吗?请先阅读我的问题再进行回答……这不仅仅是关于弃用的事情, - david glorioso
7
请修正你的问题标题。 - Sharique Abdullah

0
官方Android开发者文档输入图像描述中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接