2017-11-26 14 views
2

나는 특정 기능에 대한 메뉴 항목을 비활성화 필요로하고 내가 좋아하는 몇 가지 코드를 시도 : 여기에서 OnCreate에서 메뉴 항목을 얻거나 onresume

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu, menu); 
    this.menu = menu; 
    return true; 
} 

그리고 나중에 할당 사용하십시오 메뉴 객체에 할당 한 후

public class ExampleActivity extends AppCompatActivity 
    Menu menu; 

: 항목

menu.findItem(R.id.avviapc).setEnabled(false); 

또는 요구받을

java.lang.IndexOutOfBoundsException: Index: 2131296295, Size: 3 
         at java.util.ArrayList.get(ArrayList.java:411) 
         at android.support.v7.view.menu.MenuBuilder.getItem(MenuBuilder.java:741) 

나 :

Attempt to invoke interface method 'android.view.MenuItem android.view.Menu.findItem(int)' on a null object reference 

I 전화 :

MenuItem avviopc; 

public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.right_home, menu); 
     avviopc = menu.getItem(R.id.avviapc); 
     return true; 
    } 

avviopc.setEnabled(false); 

는하지만 난 항상 곁에 충돌이 menu.findItem(R.id.avviapc).setEnabled(false);에서 onCreate 나 onResume 특정 값이있는 경우에 해당하는 경우.

코드가 작동하기 시작한 후 수동 버튼으로 2/3 초 후에 전화를 거는 경우.

답변

1

이 메뉴는 및 onresume =)

0

MenuItem.getItem (index) 메뉴 항목의 인덱스를 가져옵니다. id를 사용하여 항목을 참조하려면 MenuItem.findItem을 사용하십시오.

avviopc = menu.findItem (R.id.avviapc); // item id

avviopc = menu.getItem (indexOfavviopc); // 항목의 지수는

+0

문제는이 당신은 내가 다른 대안을 사용하는 코드에서 볼 수 있듯이이 문제가 항상 동일하지 않습니다에서 OnCreate 후라고합니다 .MenuItem android.view.Menu.findItem (int) 'null 객체 참조에 –

0

를 인덱스 오류 해결하기 위해 onCreateOptionsMenu에 메서드를 호출 :

avviopc= menu.findItem(R.id.avviapc); // Do not use getItem(position) 

을하지만 당신은 또한 당신의 메뉴 항목의 위치를 ​​알고있는 경우가 세 가지를하고 그런 다음 세 번째를 싶은 말은 할 수 있습니다 :

avviopc = menu.getItem(2); 

설명 :

getItem(int) 그 메뉴의 메뉴 항목의 위치를 ​​원한다.

findItem(int)은 메뉴 항목의 id 리소스를 원합니다. 'android.view 인터페이스 메소드를 호출하려고 :

+0

다른 대안을 사용하는 코드에서 볼 수있는 문제는이 문제가 아닙니다. 문제는 항상 동일합니다. 인터페이스 메소드를 호출 해보십시오.'android .view.MenuItem android.view.Menu.findItem (int) 'null 객체 참조에 –

+0

메뉴가 이미 팽창되면 아무것도 null이됩니다. 다른 곳을 확인해보십시오. 나는 어딘가에서 오류가 발생할 수 있습니다 믿습니다. – Xenolion

+0

메뉴는 항상 다음에 oncreate하고 onresume하지만, onresume에서 메뉴를 호출하고 null입니다 ... 그때 문제를 이해하지 못했습니다. –