将菜单添加到子首选项屏幕

时间:2011-02-17 17:08:43

标签: android

我为PreferenceActivity提供了一个菜单。在我的孩子偏好屏幕中,我丢失了该菜单(没有弹出)。我怎样才能为孩子们弹出菜单?

感谢。

示例:

<PreferenceScreen
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:persistent="true">
  <PreferenceCategory
    android:title="some category"
    android:persistent="true"
    android:orderingFromXml="true">
    <PreferenceScreen
      android:title="some child screen"
      android:summary="some child summary">
      <PreferenceCategory
         ...

第一个首选项屏幕有菜单,但是当您点击子菜单时,没有菜单。如何添加菜单?

3 个答案:

答案 0 :(得分:3)

我有更好的解决方案,因为Suriya受到孩子PreferenceScreen的双重显示。

对于子PreferenceScreen,我使用相同的PreferenceActivity。所以首先对于我们想要使用选项菜单的子PreferenceScreen,我们在onCreate方法中将意图设置为PreferenceActivity:

ourPreferenceScreen = (PreferenceScreen) findPreference("our_preference_screen");
if (ourPreferenceScreen != null) {
    Intent intent = new Intent(this, PreferenceActivity.class);
    intent.putExtra("ShowOurPreferenceScreen", true);
    ourPreferenceScreen.setIntent(intent);
}

然后在同一个onCreate方法中,我们检测我们的PreferenceActivity是否以额外标志启动。如果是这样,我们切换到想要的PreferenceScreen:

if (getIntent().getBooleanExtra("ShowOurPreferenceScreen", false)) {
    setPreferenceScreen(ourPreferenceScreen);
    return;
}

最后我们讨论了onCreateOptionMenu以及其他相关的选项菜单方法:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    if (getPreferenceScreen().equals(ourPreferenceScreen)) {
        // your menu code
        return true;
    }
    return super.onCreateOptionsMenu(menu);
}

答案 1 :(得分:1)

我遇到了类似的问题。以下是我为克服这个问题所做的工作。

在preferenceActivity onCreate方法中,

        final PreferenceScreen childPref = (PreferenceScreen) findPreference("childPrefId");
        childPref .setOnPreferenceClickListener(new OnPreferenceClickListener() {

            @Override
            public boolean onPreferenceClick(Preference preference)
            {
                Intent intent = new Intent(PreferenceActivity.this, YourSettings.class);
                intent.setAction("ShowChildPref");
                startActivity(intent);                    
                return true;
            }
        });

        Intent intent = getIntent();
        if(intent.getAction() != null && intent.getAction().equals("ShowChildPref"))
        {                
            setPreferenceScreen(childPref);

            /*Set Flags here based on intent what kind of menu to create in OnPrepareMenu.*/
        }
    }

答案 2 :(得分:-1)

您必须在每个类中添加菜单代码,以便使用菜单按钮调出菜单。仅仅因为其他活动在后台并不意味着菜单将启动。它需要在每个类中设置,并且需要可用的菜单。