[java] Android에서 메뉴 항목 텍스트를 동적으로 변경하는 방법

메뉴 항목의 제목을 외부에서 변경하려고합니다. 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*/);
}

이것은 나를 위해 일했습니다.