메뉴 항목의 제목을 외부에서 변경하려고합니다. onOptionsItemSelected(MenuItem item)
메서드 .
나는 이미 다음을한다.
public boolean onOptionsItemSelected(MenuItem item) {
try {
switch(item.getItemId()) {
case R.id.bedSwitch:
if(item.getTitle().equals("Set to 'In bed'")) {
item.setTitle("Set to 'Out of bed'");
inBed = false;
} else {
item.setTitle("Set to 'In bed'");
inBed = true;
}
break;
}
} catch(Exception e) {
Log.i("Sleep Recorder", e.toString());
}
return true;
}
그러나이 방법 이외의 특정 메뉴 항목의 제목을 수정할 수 있기를 바랍니다.
답변
JxDarkAngel가 제안한 것처럼, 당신의 어디에서나 호출 활동 ,
invalidateOptionsMenu();
그리고 재정의 :
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem item = menu.findItem(R.id.bedSwitch);
if (item.getTitle().equals("Set to 'In bed'")) {
item.setTitle("Set to 'Out of bed'");
inBed = false;
} else {
item.setTitle("Set to 'In bed'");
inBed = true;
}
return super.onPrepareOptionsMenu(menu);
}
훨씬 더 나은 선택입니다. https://stackoverflow.com/a/17496503/568197 의 답변을 사용했습니다.
답변
활동 내에서 onCreateOptionsMenu 에서받은 Menu 객체에 대한 참조를 유지 한 다음 필요에 따라 변경이 필요한 MenuItem을 검색하는 것이 좋습니다. 예를 들어 다음과 같은 내용을 따라 무언가를 수행 할 수 있습니다.
public class YourActivity extends Activity {
private Menu menu;
private String inBedMenuTitle = "Set to 'In bed'";
private String outOfBedMenuTitle = "Set to 'Out of bed'";
private boolean inBed = false;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// Create your menu...
this.menu = menu;
return true;
}
private void updateMenuTitles() {
MenuItem bedMenuItem = menu.findItem(R.id.bedSwitch);
if (inBed) {
bedMenuItem.setTitle(outOfBedMenuTitle);
} else {
bedMenuItem.setTitle(inBedMenuTitle);
}
}
}
또는 onPrepareOptionsMenu 를 재정 의하여 메뉴가 표시 될 때마다 메뉴 항목을 업데이트 할 수 있습니다 .
답변
전역 “Menu”객체를 생성 한 다음 onCreateOptionMenu에 할당 할 수 있습니다.
public class ExampleActivity extends AppCompatActivity
Menu menu;
그런 다음 여기에 할당
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
this.menu = menu;
return true;
}
그런 다음 나중에 할당 된 Menu 객체를 사용하여 필요한 항목을 가져옵니다.
menu.findItem(R.id.bedSwitch).setTitle("Your Text");
답변
setOptionsTitle () 메소드를 작성하고 클래스에서 필드를 설정하십시오. 같은 :
String bedStatus = "Set to 'Out of Bed'";
…
public void setOptionsTitle(String status)
{
bedStatus = status;
}
이제 메뉴가 채워지면 제목을 현재 상태로 변경하십시오.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(bedStatus);
// Return true so that the menu gets displayed.
return true;
}
답변
onPrepareOptionsMenu 재정의를 사용하는 것이 좋습니다.
menu.Clear ();
if (TabActual == TabSelec.Anuncio)
{
menu.Add(10, 11, 0, "Crear anuncio");
menu.Add(10, 12, 1, "Modificar anuncio");
menu.Add(10, 13, 2, "Eliminar anuncio");
menu.Add(10, 14, 3, "Actualizar");
}
if (TabActual == TabSelec.Fotos)
{
menu.Add(20, 21, 0, "Subir foto");
menu.Add(20, 22, 1, "Actualizar");
}
if (TabActual == TabSelec.Comentarios)
{
menu.Add(30, 31, 0, "Actualizar");
}
여기 예
답변
이 코드를 사용하여 하단 탐색 항목을 계산합니다.
BottomNavigationView navigation = this.findViewById(R.id.my_bottom_navigation);
Menu menu = navigation.getMenu();
menu.findItem(R.id.nav_wall_see).setTitle("Hello");
답변
메뉴 필드를 선언하십시오.
private Menu menu;
다음은 onCreateOptionsMenu () 메소드입니다.
public boolean onCreateOptionsMenu(Menu menu) {
this.menu = menu;
try {
getMenuInflater().inflate(R.menu.menu_main,menu);
} catch (Exception e) {
e.printStackTrace();
Log.i(TAG, "onCreateOptionsMenu: error: "+e.getMessage());
}
return super.onCreateOptionsMenu(menu);
}
다음은 이름 설정 활동입니다. 버튼 클릭 또는 조건부 코드를 통해
public void setMenuName(){
menu.findItem(R.id.menuItemId).setTitle(/*Set your desired menu title here*/);
}
이것은 나를 위해 일했습니다.
