2017-08-05 91 views
2

工作。我正在使用抽屜NavigationView並且在其中具有app:actionLayout屬性定向到包含TextView一個LinearLayoutMenu一個項目,而TextView具有財產android:visibility="invisible"。當點擊Menu中的item時,我想要這個textview可見。但它不起作用,我添加了Toast來檢查點擊偵聽器是否正常工作,並且發現點擊偵聽器正在工作,但是textView不可見。setVisibility不DrawerNavigation

enter image description here

這裏是點擊監聽器(活動佈局的名字是:main_activity.xml):

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
       switch (item.getItemId()){ 
        case R.id.nav_kitchen_key: 
         View kitchenKeyLayout = getLayoutInflater().inflate(R.layout.nav_kitchen_key, null); 
         TextView kitchenKeyTextView = (TextView)kitchenKeyLayout.findViewById(R.id.show_kitchen_key); 
         kitchenKeyTextView.setVisibility(View.VISIBLE); 
         break; 
       } 
       return true; 
      } 
     }); 

這裏是Menu item

<item 
    android:id="@+id/nav_kitchen_key" 
    android:title="Kitchen Key" 
    android:icon="@drawable/if_key" 
    app:actionLayout="@layout/nav_kitchen_key" /> 

我的財產NU項目app:actionLayout引導到nav_kitchen_key.xml這裏是nav_kitchen_key.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center_vertical"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/show_kitchen_key" 
      android:textColor="@color/white" 
      android:text="2592" 
      android:visibility="invisible" 
      android:background="@drawable/kitchen_key_background"/> 

</LinearLayout> 

回答

3

你不應該創建新的視圖,你應該從菜單項得到,MenuItem.getActionView()

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
       switch (item.getItemId()){ 
        case R.id.nav_kitchen_key: 
         LinearLayout kitchenKeyLayout = (LinearLayout) item.getActionView(); 

         TextView kitchenKeyTextView = (TextView)kitchenKeyLayout.findViewById(R.id.show_kitchen_key); 
         kitchenKeyTextView.setVisibility(View.VISIBLE); 
         break; 
       } 
       return true; 
      } 
     }); 
+0

'View kitchenKeyLayout = item.getActionView();'工作正常。如果它需要像在答案中提供的LinearLayout一樣投射,它們之間是否有區別。 –

+1

item.getActionView()將僅返回視圖,只要您不打算使用LinearLayout的屬性,則可以使用View。我只是補充一點,確保你的XML佈局的根視圖。 –

1

您從getActionView

得到一個視圖
LinearLayout kitchenKeyLayout = (LinearLayout) item.getActionView(); 
    // This returns the container layout 

TextView kitchenKeyTextView = (TextView)kitchenKeyLayout.findViewById(R.id.show_kitchen_key); 
          kitchenKeyTextView.setVisibility(View.VISIBLE); 

kitchenKeyTextView.setVisibility(View.VISIBLE); 
+0

該項目不在標題,它在菜單 –

+0

NavigationView有itemview權利? – redAllocator

+0

更新後的新圖像。廚房的鑰匙需要點擊 –

相關問題