2012-10-15 3 views
3

는 좀 안드로이드 응용 프로그램을 개발하고있어, 나는 메뉴에 대한 몇 가지 코드를 가지고 :프로그래밍 방식으로 메뉴에서 MenuItems를 제거하는 방법?

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:showAsAction="ifRoom" 
     android:id="@+id/menuItemToLeft" 
     android:icon="@drawable/to_left" /> 
    <item 
     android:showAsAction="ifRoom" 
     android:id="@+id/menuItemToRight" 
     android:icon="@drawable/to_right"/> 
</menu> 

내가 작업 표시 줄에서이 항목을 표시하기 위해 "showAsAction"를 사용합니다. 또한 탐색을 위해 3 개의 탭이 있습니다. 그러나 다음과 같은 작업이 있습니다. 위치가 0 인 탭을 선택하면 작업 표시 줄에서이 항목을 제거 (또는 표시를 false로 설정)합니다. 그러나 나는 내가 할 수있는 방법을 이해하지 않습니다

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
    mViewPager.setCurrentItem(tab.getPosition()); 
    if (tab.getPosition()==0) { 
    //some code 
    } 
} 

답변

13

을 시도 만 사용하여 표시하지 :

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    super.onPrepareOptionsMenu(menu); 
    menu.findItem(R.id.menuItemToLeft).setVisible(true); 
    menu.findItem(R.id.menuItemToRight).setVisible(false); 
    return true; 
} 
//true or false depending on your requirements 

또는 삭제 :

menu.removeItem(x); //where x is the number of the menu item from 0,1,... 

그런 다음 만들어야 할 수도 있습니다 MenuItem을 다시 사용 menu.Add()

+0

onPrepareOptionsMenu는 탭이 변경 될 때마다가 아니라 한 번만 호출됩니다. – malcoauri

+4

맞습니다.하지만 "onPrepareOptionsMenu"를 다시 실행하려면 사용자가 "invalidateOptionsMenu"를 호출해야합니다. – malcoauri

+1

@Stephen Walker 답변에 malcoari의 포인트를 추가하면 독자에게 친숙해질 것입니다. –

0

매우 작은 해결책은

입니다.
public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 
Menu myMenu; 


protected void onCreate(Bundle savedInstanceState) { 
..... 
} 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     myMenu = menu; 
     return true; 
    } 

@Override 
    public boolean onNavigationItemSelected(MenuItem item) { 

int id = item.getItemId(); 
if (id == R.id.feedsenglish) 
     { 
      myMenu.findItem(R.id.allfeeds).setVisible(false); 
     } 
} 
관련 문제