Phương thức setDrawerListener không được dùng nữa


226

Trong khi tôi đang làm gì đó trên ứng dụng của mình, tôi thấy rằng ngăn điều hướng trên ứng dụng của tôi đã giảm kích thước. Nhưng tôi không làm gì cả.

ngăn kéo điều hướng

Sau đó, sau khi kiểm tra mã, tôi thấy rằng setDrawerListener không được dùng nữa. Có ai có một giải pháp cho điều này?

drawerLayout.setDrawerListener(actionBarDrawerToggle);

9
Mã không dùng nữa có lẽ không liên quan gì đến kích thước ngăn kéo. Nó có nghĩa là họ sẽ loại bỏ hỗ trợ cho nó trong tương lai (phương pháp cụ thể). Nó có thể được thay thế bằng addDrawerListener nhưng tôi không chắc về điều đó.
chRyNaN

tôi hiểu rồi .. nhưng tôi không thể thấy bất kỳ vấn đề gì, tôi vừa tạo ra một đoạn mới không được kết nối trên ngăn kéo đó .. thực sự không thể hiểu tại sao điều đó lại xảy ra ...
david glorioso

bạn đang sử dụng phiên bản nào của thư viện?
Amit Vaghela

Tôi đang sử dụng >> biên dịch 'com.android.support:appcompat-v7:23.2.0', biên dịch 'com.android.support:design:23.2.0', biên dịch 'com.android.support:support-v4 : 23.2.0 '
david glorioso

Câu trả lời:


751

Sử dụng addDrawerListener()thay thế.


13
Tại sao. Đơn giản, tại sao.
Broak

9
Tại sao họ lại làm chuyện tào lao này
Alex Wohlbride 18/03/2017

7
Để thống nhất API. Họ đã thêm vào removeDrawerListener()như vậy add...được đặt tên cho phù hợp
Marcin Orleansowski

26
ít nhất họ có thể bao gồm use 'addDrawerListener' insteadthông điệp không dùng nữa!
AaA

1
Vậy ... chúng ta có thể thêm nhiều người nghe ngăn kéo không?
Kenny Worden

84

Thay thế:

drawer.setDrawerListener(...);

với

drawer.addDrawerListener(...);

public void setDrawerListener(DrawerLayout.DrawerListener listener) Đặt một người nghe để được thông báo về các sự kiện ngăn kéo.

Lưu ý rằng phương pháp này không được dùng nữa và bạn nên sử dụng addDrawerListener(DrawerLayout.DrawerListener)để thêm người nghe và removeDrawerListener(DrawerLayout.DrawerListener)xóa người nghe đã đăng ký.


18
Chúng ta nên loại bỏ người nghe ngăn kéo và điều này là cần thiết?
portfoliobuilder

@portfoliobuilder Nó phụ thuộc. Nói chung, nó không cần thiết. Nếu bạn đặt nó vào onCreate()và bạn xoay màn hình, toàn bộ hoạt động được tạo lại và trình nghe mới được đặt. Các trường hợp phức tạp hơn nên được xử lý với suy nghĩ rằng (có thể) không cần phải có nhiều hơn 1 người nghe được đặt DrawerLayout.
Johnny Five

29

Thay thế setDrawerListener

drawerLayout.setDrawerListener(actionBarDrawerToggle);

với addDrawerListener

drawerLayout.addDrawerListener(actionBarDrawerToggle);

thí dụ

  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

Tôi đoán tôi sẽ trả lời câu hỏi của tôi. Cái mới nhất navigationViewtạo ra mặc định của nó android:layout_heightgần như 18dpkhi bạn chọn "wrap_content". Vì vậy, bạn phải chọn cái android:layout_heightmà bạn muốn cho bạn navigationViewhoặc đơn giản là thực hiện 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>

Dù sao, chiều cao của nó sẽ tự động tăng lên khi bạn thêm một mục trong ngăn kéo điều hướng.

Cuối cùng, sử dụng addDrawerListener()thay vì setDrawerListener()như Luxi Liu đã nói.


6
bởi vì đó không phải là câu hỏi chính của tôi bạn không thấy sao Xin vui lòng đọc vấn đề của tôi trước khi ... Đó không chỉ là điều không được chấp nhận,
david glorioso 18/03/2016

7
Sau đó, có thể sửa tiêu đề câu hỏi của bạn
Sharique Abdullah
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.