0

我一直在尋找一個相當長的解決方案。所以這就是我想要實現的。我有以下菜單實現的NavigationDrawer:只有當NavigationDrawer打開時才採取行動

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<group android:checkableBehavior="single"> 
    <item 
     android:id="@+id/nav_dashboard" 
     android:icon="@drawable/ic_dashboard" 
     android:title="Dashboard" /> 
    <item 
     android:id="@+id/nav_logbook" 
     android:icon="@drawable/ic_logbook" 
     android:title="Logbook" /> 
    <item 
     android:id="@+id/nav_context" 
     android:icon="@drawable/ic_context" 
     android:title="Context" /> 
</group> 
</menu> 

當有添加新的背景下,我想加入的括號之間的新的更新量,以顯示這抽屜式導航用戶。像這樣的例子:Context (2)當有兩個新的更新。

我想每次抽屜打開時檢查一次,但最好只檢查一次,因爲背後有一個相當繁重的SQL查詢。我知道我可以使用onDrawerOpened()onDrawerClosed(),但我不喜歡這種解決方案,因爲只有當抽屜完全打開時,號碼纔會突然更新。所以它會保持一個數字,直到它完全打開,然後它會改變。這看起來很愚蠢。所以這就是爲什麼當導航抽屜開始打開時我會想改變一次。我發現沒有像樣的國家與聽衆一起檢查這件事,因爲只有STATE_IDLE,STATE_DRAGGINGSTATE_SETTLING,沒有什麼特別說明什麼時候打開和關閉,只是拖拽和安定。

此外,我還想保留片段上下文的標題停留「上下文」,而不是更改爲「上下文(2)」。這發生在我當前的代碼:

mToggle = new ActionBarDrawerToggle(
      this, 
      mDrawer, 
      mToolbar, 
      R.string.drawer_open, 
      R.string.drawer_close 
){ 
     @Override 
     public void onDrawerSlide(View drawerView, float slideOffset) { 
      super.onDrawerSlide(drawerView, slideOffset); 
      if (slideOffset != 0) { 
       Log.i(TAG, "onDrawerSlide() in update amount"); 
       int amount = db.getAmountNoContext(); 
       String sourcestring = "Context <b>(" + amount + ")</b>"; 
       mNavigationView.getMenu().getItem(2).setTitle(Html.fromHtml(sourcestring)); 
      } 
     } 
}; 

這是工作在抽屜式導航欄更改菜單標題,但它也被連續叫了很多次,因爲偏移不斷變化。這是因爲SQL查詢不理想。我也嘗試將其設置爲一個特定的浮點值,如0.01,但它沒有被觸發。另外我想提醒一下,我想在導航抽屜關閉時將菜單標題改回來,所以ActionBar中的片段標題只是說「上下文」。我已經完成了我的研究,但似乎我只是有一個非常具體的問題?也許你們有一個想法。提前致謝。

回答

0

我現在「解決了」我的問題,只需使用布爾值來跟蹤SQL查詢是否已執行。如果是這樣,則布爾值設置爲true,並且在使用onDrawerClosed()函數完全關閉抽屜之前,不會再次輸入條件。我會這樣做直到可能有人提出更好的解決方案。我的解決方案,現在看起來是這樣的:

mToggle = new ActionBarDrawerToggle(
      this, 
      mDrawer, 
      mToolbar, 
      R.string.drawer_open, 
      R.string.drawer_close 
){ 
     @Override 
     public void onDrawerSlide(View drawerView, float slideOffset) { 
      super.onDrawerSlide(drawerView, slideOffset); 
      if (slideOffset != 0 && !contextUpdated) { 
       int amount = db.getAmountNoContext(); 
       String sourcestring = "Context (" + amount + ")"; 
       NavigationView.getMenu().getItem(2).setTitle(Html.fromHtml(sourcestring)); 
       contextUpdated = true; 
      } 
     } 

     @Override 
     public void onDrawerClosed(View drawerView) { 
      super.onDrawerClosed(drawerView); 
      contextUpdated = false; 
     } 
}; 

爲了改變操作欄的標題回到常規標題,沒有括號。

MainActivity:

public void setActionBarTitle(String title) { 
    getSupportActionBar().setTitle(title); 
} 

片段:

((MainActivity) getActivity()).setActionBarTitle("Context"); 
我只是手工做這個設定在片段的 onCreateView()稱號
相關問題