2017-05-09 2 views
8

strings.xml 파일에서 true/false로 설정할 일부 문자열에 따라 Android 응용 프로그램에서 메뉴의 일부 옵션을 표시하거나 숨기려고합니다. 예를 들어 Android에서 메뉴 옵션을 매개 변수화하는 방법은 무엇입니까?

, 나는 strings.xml 파일에 이러한 문자열이있을 것이다 :
<string name="option1">false</string> 
<string name="option2">true</string> 
<string name="option3">true</string> 

그래서이 경우에만 option2option3 표시해야합니다.

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

    getMenuInflater().inflate(R.menu.main, menu); 

    if((getResources().getString(R.string.option1)).equals("false")){ 
     menu.getItem(R.id.option1).setVisible(false); 
    } 

    return true; 
} 

그러나 option1 여전히 메뉴에 표시되는 : 다른 측면에서

는, 내 말은, 코드에서, 나는 다음 시도했다.

이러한 옵션을 매개 변수화하려면 어떻게해야합니까? 이러한 옵션을 제거 할 수는 있지만 앞으로 고객이 이러한 옵션을 다시 사용하기를 원한다면 거짓 값을 true로 변경하면 쉽게 해결할 수 있습니다.

편집 : 나는 메뉴의 이름이 잘못했기 때문에 내가 NullPointerException을 얻고 있었다 통지를

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

    <group android:checkableBehavior="single"> 
     <item 
      android:id="@+id/option1" 
      android:title="Option 1" /> 
     <item 
      android:id="@+id/option2" 
      android:title="Option 2" /> 
     <item 
      android:id="@+id/option3" 
      android:title="Option 3" /> 
     .... 
    </group> 
</menu> 

LAST UPDATE

: 여기 내 메뉴입니다. 나는 그것을 고쳤고 이제는 어떤 오류도주지 않는다.

그러나 두 개의 다른 레이아웃 (각 레이아웃마다 하나씩)이 포함 된 두 개의 다른 레이아웃이 있고 로그인 할 때 나타나는 하나의 문자열에 따라 각 레이아웃이 팽창하기 때문에 문제가 발생합니다. 내가 그렇게 두 메뉴의 옵션을 변수화 수있는 방법

if("hello".equals(stringForLayout)){ 
    setContentView(R.layout.activity_main); 
}else{ 
    setContentView(R.layout.activity_main_secondary); 
} 

를 : 첫 번째 레이아웃을 팽창하는 캐릭터 라인 내 MainActivityonCreate 기능을 다음과 같이 "안녕하세요"나는 레이아웃을 표시하는 것을 고려 예를 들어

, 첫 번째가 표시되고 하나의 옵션을 숨기려면 해당 메뉴의 해당 옵션을 참조 할 수 있습니까?

미리 감사드립니다. 당신이 문자열 (예 : S1 & S2)를 사용하는 경우

+1

@ user3728999에 따르면 표준 SharedPreferences 솔루션을 사용하는 것이 좋습니다. 메뉴 항목 가시성을 적절하게 설정하십시오. –

답변

3

마지막으로 내 문제가있는 부분을 발견했습니다.

onCreateOptionsMenuonPrepareOptionsMenu이 사용되지 않아서 삭제 된 것을 알지 못했기 때문에 문제가 발생했습니다.나는 NavigationView 안에 내 메뉴를 사용하여되면서

또한, 내가 후 내 MainActivity 클래스, 다음과 같은 성명의 내 onCreate 기능에 NavigationView을 팽창, 사용했다 :이

navigationView.getMenu().findItem(R.id.option1).setVisible(false); 

, 나는하지 않았다 어떤 문제라도 내 메뉴 항목을 숨길 수 있습니다.

4

,이처럼 그들을 비교할 수 있습니다

(s1.equals (S2)) {...}

이 Btw는 당신에게 .: 경우 수 또한 안드로이드 설명서에서 공유 환경 설정을보고 더 깨끗한 솔루션을 얻으십시오. 여기서 다양한 메뉴 옵션에 대한 부울 변수를 정의 할 수 있습니다.

+0

OMG! 나는 그 실수를했다고 믿을 수 없다. 자바 프로그래밍하지 않고 몇 시간 초보자 실수로 돌아 왔습니다 :(.하지만 난 또 다른 의심, 내가 false로 표시되는 false로 menuOption 만들려고 할 때 : java.lang.NullPointerException : 인터페이스 메서드를 호출하려고 ' android.view.MenuItem android.view' .' getItem'과'findItem' 두 가지를 모두 시도했지만 같은 오류가 발생했습니다. 다른 곳에서 비교를해야합니까? –

+0

또한 xml을 menu? – user3728999

+0

메뉴의 xml을 추가했습니다. –

0

특정 활동에 대한 특정 메뉴 항목을 숨기려면이 방법을 사용하십시오.

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuItem mSearch = menu.findItem(R.id.mSearch); 
     mSearch.setVisible(false); 
     invalidateOptionsMenu(); 
} 
관련 문제