簡體   English   中英

從片段禁用導航抽屜

[英]Disabling navigation drawer from fragment

我有一個帶有導航抽屜和 4 個導航項(片段)的應用程序。 在其中一個片段中,我設置了一個帶有視圖尋呼機(另外 3 個片段)的選項卡布局。

從這些內部片段之一,我想動態禁用/啟用導航抽屜。 基本上,在按下按鈕時,我想限制對導航抽屜的訪問(以及再次按下時重新啟用)。

我該怎么做?

我嘗試從這個內部片段訪問父活動的DrawerLayout 但是我看不到啟用/禁用導航抽屜的方法。

我將抽屜添加到我的主要活動的方式:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);

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

(當然,我已經從onPostCreate方法中添加了toggle.syncState()

一種干凈的方法是創建一個Activity實現的interfaceFragment可以通過該interface調用處理抽屜鎖定和切換按鈕狀態的Activity本地方法。 例如:

public interface DrawerLocker {
    public void setDrawerEnabled(boolean enabled);
}

Activityinterface方法中,我們只是為DrawerLayout#setDrawerLockMode()調用設計鎖定模式常量,並在ActionBarDrawerToggle上調用setDrawerIndicatorEnabled()

public class MainActivity extends Activity implements DrawerLocker {

    public void setDrawerEnabled(boolean enabled) {
        int lockMode = enabled ? DrawerLayout.LOCK_MODE_UNLOCKED :
                                 DrawerLayout.LOCK_MODE_LOCKED_CLOSED;
        drawer.setDrawerLockMode(lockMode);
        toggle.setDrawerIndicatorEnabled(enabled);
    }

    ...
}

Fragment ,我們只需要將托管Activity轉換為interface ,並相應地調用setDrawerEnabled()方法。 例如,要關閉抽屜:

((DrawerLocker) getActivity()).setDrawerEnabled(false);

注意:從v7 appcompat支持庫的版本23.2.0開始, ActionBarDrawerToggle遵循DrawerLayout的鎖定模式,如果它被鎖定,則不會切換抽屜狀態。 這意味着使用setDrawerIndicatorEnabled()並不是絕對必要的,盡管可能仍然需要這樣做以便為用戶提供禁用切換的可視指示。

對於 Kotlin 語言,這兩行:第一行用於關閉抽屜,第二行用於將其模式設置為“LOCK_MODE_LOCKED_CLOSED”(使其禁用)

drawerLayout.close()
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)

“drawerLayout”是這樣定義的:第一行:聲明一個 DrawerLayout 對象的實例 第二行:給它賦值

private lateinit var drawerLayout:DrawerLayout
drawerLayout = findViewById(R.id.activity_main_container)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM