首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android DrawerLayout 監聽事件 onDrawerClosed/Open 不觸發:setDrawerListener 已棄用,改用 addDrawerListener

     編輯:程式設計綜合問答

問題原因

DrawerLayout.setDrawerListener() 在 API 24+ **已棄用**,且若 Activity 實作 ActionBarDrawerToggle 並呼叫 syncState(),可能覆蓋自訂監聽器。

正確寫法:addDrawerListener


DrawerLayout drawer = findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
    this, drawer, R.drawable.ic_menu, R.string.open, R.string.close) {
    @Override
    public void onDrawerClosed(View drawerView) {
        super.onDrawerClosed(drawerView);
        Log.d("Drawer", "CLOSED");
    }
    @Override
    public void onDrawerOpened(View drawerView) {
        super.onDrawerOpened(drawerView);
        Log.d("Drawer", "OPENED");
    }
};
drawer.addDrawerListener(toggle); // 關鍵:使用 addDrawerListener
toggle.syncState(); // 同步三線圖標狀態

常見遺漏

  • 未呼叫 toggle.syncState() 導致圖標動畫、狀態不同步。
  • ActionBarDrawerToggle 建構子需傳入 Toolbar(新版)而非 DrawerLayout 做錨點。

參考資源

CSDN DrawerLayout 監聽器完整教學

總結

DrawerLayout 監聽請使用 addDrawerListener 而非棄用的 setDrawerListener,並確保呼叫 toggle.syncState()。若仍不觸發,檢查 DrawerLayout 是否正確設置 android:fitsSystemWindows 及佈局層級。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved