[java] Android : 프로그래밍 방식으로 옵션 메뉴 항목 변경

프로그래밍 방식으로 옵션 메뉴 항목을 변경할 수 있습니까? 누구든지 예를 들어 줄 수 있습니까?

또한 클릭을 듣지 않도록 특정 항목을 비활성화하고 싶습니다. 가능합니까?



답변

누구나 메뉴의 옵션을 동적으로 변경해야하는 경우 :

private Menu menu;

// ...

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

// ...

private void hideOption(int id)
{
    MenuItem item = menu.findItem(id);
    item.setVisible(false);
}

private void showOption(int id)
{
    MenuItem item = menu.findItem(id);
    item.setVisible(true);
}

private void setOptionTitle(int id, String title)
{
    MenuItem item = menu.findItem(id);
    item.setTitle(title);
}

private void setOptionIcon(int id, int iconRes)
{
    MenuItem item = menu.findItem(id);
    item.setIcon(iconRes);
}


답변

menu.xml

  <item
    android:id="@+id/item1"
    android:title="your Item">
  </item>

자바 파일에 넣어

  public void onPrepareOptionsMenu(Menu menu) {

    menu.removeItem(R.id.item1);
}


답변

Nikolay가 onPrepareOptionsMenu ()에서 그렇게 말한 것처럼.

작업 표시 줄의 메뉴 항목의 경우 다음을 사용하여 메뉴를 무효화해야합니다.
activity.invalidateOptionsMenu();

자세한 내용은 여기에 설명되어 있습니다. onPrepareOptionsMenu가 메뉴 항목을 전환 할 때 ActionBar를 어떻게 새로 고칠 수 있습니까?


답변

옵션 메뉴의 내용을 변경해야하는 경우 onMenuOpened () 중에 수행합니다. 이를 통해 사용자가 메뉴에 액세스하는 순간의 실행 상태를 확인할 수 있습니다.

public boolean onMenuOpened(int featureid, Menu menu)
    {
        menu.clear();
        if (!editable)
        {
            MenuItem itemAdd = menu.add(0, REASSIGN, Menu.NONE, context.getString(R.string.reassign));
            MenuItem itemMod = menu.add(1, EDIT, Menu.NONE, context.getString(R.string.modify));
            MenuItem itemDel = menu.add(2, DELETE, Menu.NONE, context.getString(R.string.delete));
            itemAdd.setShortcut('0', 'a');
            itemMod.setShortcut('1', 'm');
            itemDel.setShortcut('2', 'd');
        }
        else
        {
            MenuItem itemSave = menu.add(3, SAVE, Menu.NONE, context.getString(R.string.savechanges));
            itemSave.setShortcut('0', 'S');
        }


        return true;
    }


답변

특정 항목을 비활성화하려면 :

MenuItem item = menu.findItem(R.id.ID_ASSING_TO_THE_ITEM_IN_MENU_XML);
item.setEnabled(false);


답변

다음 줄을 사용하여 메뉴에 값을 추가했습니다.

getActivity().invalidateOptionsMenu();

나에게 매력처럼이 작업을 시도해보세요.


답변

이 코드를 시도하십시오.

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    this.menu=menu;
    updateMenuItems(menu);
    return super.onPrepareOptionsMenu(menu);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.document_list_activity_actions, menu);
    return super.onCreateOptionsMenu(menu);
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle presses on the action bar items
    if (item.getItemId() == android.R.id.home) {
        onHomeButtonPresssed();
    }else if (item.getItemId() == R.id.action_delete) {
        useCheckBoxAdapter=false;
        deleteDocuments();
    } else if (item.getItemId() == R.id.share) {
        useCheckBoxAdapter=false;
        shareDocuments();
    } else if (item.getItemId() == R.id.action_tick) {
        useCheckBoxAdapter=true;
        onShowCheckboxes();
    }
    updateMenuItems(menu);
    return true;
}

private void updateMenuItems(Menu menu){
    if (useCheckBoxAdapter && menu != null) {
        menu.findItem(R.id.action_delete).setVisible(true);
        menu.findItem(R.id.share).setVisible(true);
        menu.findItem(R.id.action_tick).setVisible(false);
    } else {
        menu.findItem(R.id.action_delete).setVisible(false);
        menu.findItem(R.id.share).setVisible(false);
        menu.findItem(R.id.action_tick).setVisible(true);
    }
    invalidateOptionsMenu();
}