Метод setDrawerListener устарел

226

Пока я что-то делаю в своем приложении, я вижу, что блок навигации в моем приложении уменьшил свой размер. Но я ничего не делаю по этому поводу.

навигационный ящик

Затем, после проверки кода, я увидел, что setDrawerListener устарела. У кого-нибудь есть решение этого?

drawerLayout.setDrawerListener(actionBarDrawerToggle);
Дэвид Глориозо
источник
9
Устаревший код, вероятно, не имеет никакого отношения к размеру ящика. Это означает, что они уберут поддержку для этого в будущем (определенный метод). Вероятно, он заменен addDrawerListener, но я не уверен в этом.
chRyNaN
я вижу ... но я не вижу никаких проблем, я только что создал новый фрагмент, который не связан с этим ящиком ... не могу понять, почему это произошло ...
Дэвид Глориосо
какую версию библиотеки вы используете?
Амит Вагела
Я использую это >> 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 '
Дэвид Глориозо

Ответы:

751

Используйте addDrawerListener()вместо этого.

Люкс Лю
источник
13
Зачем. Просто почему.
Broak
9
Почему они делают это дерьмо
Алекс Вольбрюк
7
Для согласованности API. Они добавили removeDrawerListener()так add...названо, чтобы соответствовать
Марчин Орловски
26
по крайней мере, они могут быть включены use 'addDrawerListener' insteadв устаревшее сообщение!
AaA
1
Итак ... мы можем добавить несколько слушателей ящика?
Кенни Уорден
85

Заменить:

drawer.setDrawerListener(...);

с участием

drawer.addDrawerListener(...);

public void setDrawerListener(DrawerLayout.DrawerListener listener) Устанавливает слушателя быть уведомленным о событиях ящика.

Обратите внимание, что этот метод устарел, и вы должны использовать, addDrawerListener(DrawerLayout.DrawerListener)чтобы добавить слушателя и removeDrawerListener(DrawerLayout.DrawerListener)удалить зарегистрированного слушателя.

Jzapata
источник
18
Где мы должны удалить ящик слушателя и нужно ли это?
портфолиофото
@portfoliobuilder Это зависит. Как правило, это не обязательно. Если вы установили его onCreate()и вращаете экран, все действие воссоздается и устанавливается новый слушатель. Более сложные случаи должны решаться с мыслью, что (вероятно) нет необходимости устанавливать более 1 слушателя DrawerLayout.
Джонни
29

замещать 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);
sivaBE35
источник
22

Думаю, я отвечу на мой вопрос. Последний navigationViewвыдает его по умолчанию android:layout_heightпочти 18dpпри выборе "wrap_content". Итак, вы должны выбрать то, android:layout_heightчто хотите для себя navigationViewили просто сделать 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>

В любом случае, его высота автоматически увеличивается, когда вы добавляете элемент в ящик навигации.

Наконец, используйте addDrawerListener()вместо того, setDrawerListener()как сказал Люкси Лю.

Дэвид Глориозо
источник
6
потому что это не мой главный вопрос. ты не видишь? Пожалуйста, прочитайте мою проблему раньше ... Это не только устаревшая вещь,
Дэвид Глориозо
7
Тогда, возможно,
почините