2017-08-05 90 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

更新后的新图像。厨房的钥匙需要点击 –

相关问题