0

我正在为我的 android 应用程序设置一些基本设置,但遇到了一些问题。首先,我不知道如何使用操作栏右上角的三点菜单打开设置。所以我临时创建了一个调用chooseSettings的按钮:

一个按钮

    public void chooseSettings(View view) {
    getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferenceActivity()).commit();
}

这是我的 PreferenceActivity 类的代码:

public class PreferenceActivity extends PreferenceFragment {
@Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.preferences);
 }
}

什么样的作品。这导致我的屏幕看起来像这样:。

这

4

1 回答 1

2

溢出菜单中的设置

为了使用溢出菜单中的设置,您需要覆盖onOptionsItemSelected方法(如果尚未覆盖)并处理正确的 id。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        // Code to show settings.
        return true;
    }
    return super.onOptionsItemSelected(item);
}

替换R.id.action_settings为您的菜单项的 ID。

显示 PreferenceFragment

正如您在图像中显示的那样,您的首选项屏幕与现有布局重叠。

请注意,您只能替换您动态添加的片段。

我猜你的屏幕的 xml 中有 Guess Country 和 Guess Flags 按钮被夸大了,并且没有作为片段动态添加,所以通过添加首选项片段,它只会重叠显示。

解决方案

您可以解决此问题的一种方法是创建并启动一个新活动,该活动将加载您的偏好片段。

例如,如果您创建名为的类SettingsActivity,它将加载首选项(不要忘记添加到 AndroidManifest):

public class SettingsActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferenceActivity()).commit();
    }
}

然后在您的 中onOptionsItemSelected,您可以启动设置活动。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        Intent intent = new Intent(this, SettingsActivity.class);
        startActivity(intent);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

否则,您需要更改主布局以使用框架布局之类的东西,以便您可以正确添加/删除/替换片段。

于 2014-04-13T20:23:51.470 回答