เมธอด setDrawerListener เลิกใช้แล้ว


226

ขณะที่ฉันทำอะไรบางอย่างกับแอพของฉันฉันเห็นว่าลิ้นชักการนำทางในแอพของฉันลดขนาดลง แต่ฉันไม่ได้ทำอะไรเลย

ลิ้นชักการนำทาง

จากนั้นหลังจากตรวจสอบรหัสฉันเห็นว่า setDrawerListener เลิกใช้แล้ว ใครบ้างมีวิธีแก้ปัญหานี้?

drawerLayout.setDrawerListener(actionBarDrawerToggle);

9
รหัสที่เลิกใช้แล้วอาจไม่มีอะไรเกี่ยวข้องกับขนาดลิ้นชัก หมายความว่าพวกเขาจะลบการสนับสนุนในอนาคต (วิธีการเฉพาะ) อาจถูกแทนที่ด้วย addDrawerListener แต่ฉันไม่แน่ใจ
chRyNaN

ฉันเห็น .. แต่ฉันไม่สามารถมองเห็นปัญหาใด ๆ ฉันเพิ่งสร้างส่วนใหม่ที่ไม่ได้เชื่อมต่อกับลิ้นชักว่า .. ไม่สามารถจริงๆเข้าใจว่าทำไมสิ่งที่เกิดขึ้น ...
เดวิดโก

คุณใช้ไลบรารีรุ่นใด
Amit Vaghela

ฉันใช้สิ่งนี้ >> คอมไพล์ 'com.android.support:appcompat-v7:23.2.0', คอมไพล์ 'com.android.support:design:23.2.0', คอมไพล์ 'com.android.support:support-v4 : 23.2.0 '
david glorioso

คำตอบ:


751

ใช้addDrawerListener()แทน


13
ทำไม. เพียงแค่ทำไม
Broak

9
ทำไมพวกเขาถึงทำอึนี้
อเล็กซ์โวห์ลบรุค

7
เพื่อความสอดคล้องของ API พวกเขาเพิ่มremoveDrawerListener()ดังนั้นจึงadd...ถูกเสนอชื่อให้จับคู่
Marcin Orlowski

26
อย่างน้อยพวกเขาสามารถรวมไว้use 'addDrawerListener' insteadในข้อความที่เลิกใช้แล้ว!
AaA

1
ดังนั้น ... เราสามารถเพิ่มผู้ฟังหลายคนได้หรือไม่?
Kenny Worden

84

แทนที่:

drawer.setDrawerListener(...);

กับ

drawer.addDrawerListener(...);

public void setDrawerListener(DrawerLayout.DrawerListener listener) ตั้งค่า listener เพื่อรับการแจ้งเตือนของเหตุการณ์ drawer

โปรดทราบว่าวิธีการนี้เลิกใช้แล้วและคุณควรใช้addDrawerListener(DrawerLayout.DrawerListener)เพื่อเพิ่มฟังและremoveDrawerListener(DrawerLayout.DrawerListener)ลบผู้ฟังที่ลงทะเบียน


18
เราควรเอาฟังลิ้นชักออกจากที่ใดและจำเป็นหรือไม่
portfoliobuilder

@portfoliobuilder มันขึ้นอยู่กับ โดยทั่วไปไม่จำเป็น หากคุณตั้งค่าไว้onCreate()และคุณหมุนหน้าจอกิจกรรมทั้งหมดจะถูกสร้างขึ้นใหม่และตั้งค่าฟังใหม่ กรณีที่ซับซ้อนมากขึ้นควรได้รับการจัดการโดยคิดว่า (อาจ) ไม่จำเป็นต้องตั้งค่าฟังมากกว่า 1 DrawerLayoutรายการ
Johnny Five

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);

22

ฉันเดาว่าฉันจะตอบคำถามของฉัน ล่าสุดnavigationViewผลิตเริ่มต้นandroid:layout_heightที่เกือบเมื่อคุณเลือก18dp "wrap_content"ดังนั้นคุณต้องเลือกandroid:layout_heightที่คุณต้องการสำหรับคุณหรือเพียงแค่ทำให้navigationViewandroid: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()Luxi Liu กล่าว


6
เพราะนั่นไม่ใช่คำถามหลักของฉัน ไม่เห็นเหรอ โปรดอ่านปัญหาของฉันก่อน ... ไม่เพียง แต่สิ่งที่คัดค้านเท่านั้น
david glorioso

7
จากนั้นอาจแก้ไขชื่อคำถามของคุณ
Sharique Abdullah
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.