0

メニューの項目を選択した後で、オプション メニューを変更しようとしています。これは私が試したものです:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

    if(refresh) {

        menu.clear();
        menu.add(0, Menu.FIRST, 0, "Changed item");

    }

    return super.onPrepareOptionsMenu(menu);

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if(item.getItemId() == R.id.refresh)
    {
        refresh = true;
        closeOptionsMenu();
        invalidateOptionsMenu();
        openOptionsMenu();
    }
    return super.onOptionsItemSelected(item);
}

しかし、私は得る:

W/InputManagerService(192): Window already focused, ignoring focus gain of:     com.android.internal.view.IInputMethodClient$Stub$Proxy@4147c778

コードが機能していません..何か考えはありますか?

4

2 に答える 2

1

メニューボタンを再クリックした場合にのみ、メニューが閉じて再度開くことはありません。新しい値が表示されます

アイテムが選択された後にオプションメニューを開いたままにしておく方法はわかりませんが、ハンドラーとランナブルを使用して自動的に再度開くことができます。

いくつかの新しいフィールド変数を作成します。

private Handler handler = new Handler();
private Runnable reopenMenu = new Runnable() {
    @Override
    public void run() {
        openOptionsMenu();
    }
};

内部onOptionsItemSelected()使用:

if(item.getItemId() == R.id.refresh)
{
    refresh = true;
    invalidateOptionsMenu(); // This is only necessary for changing an ActionBar
    handler.postDelayed(reopenMenu, 100);
}

(メニューを閉じたり開いたりする呼び出しを削除したことに注意してください。)変更を行う必要があるのは一度だけなので、
最後に設定refresh = false;する必要があります。onPrepareOptionsMenu()

于 2012-11-27T18:35:55.927 に答える
0

2 番目のボタンは既にメニューにあるが、可視性を GONE に設定しておき、必要なときに表示できるようにする方が簡単な場合があります。

MenuItem = menu.findItem(R.id.menuItem);

MenuItem.setVisible(false);
于 2012-11-27T17:30:44.397 に答える