单页PreferenceActivity没有标题/片段?

Bil*_*ris 61 android android-preferences android-fragments

我正在努力完成一些我觉得很容易的事情,但是我对如何使用PreferenceActivity类和xml preference-header标签来实现它感到困惑.

当用户点击应用设置图标时,我希望它们会显示一个小的复选框和列表列表.我只有一个偏好片段.到目前为止,我可以设置PreferenceActivity xml文件(preferences.xml和首选项片段xmls)来显示首选项片段的单个标头.当用户选择该标题时,首选项屏幕正是我想要的,但是,我无法找到跳过显示第一个标题屏幕的方法.

必须点击设置/首选项图标,显示单个标题然后点击以获得实际设置/首选项似乎是浪费.

我理解如果你想对你的偏好进行分类,这会非常有用,但对于简单的事情,这会增加开销并且看起来相当笨重.

我希望我很清楚.总之,这是我的问题:

使用PreferenceActivity类和preference-header标签的新首选方法是简单地显示没有标题的单个选项屏幕?

在环顾四周之后,看起来我正试图以旧的方法直接进行.我试图在不使用任何已弃用的函数的情况下执行此操作.

在此先感谢,B.

小智 90

新的首选方式是将单个显示PreferenceFragment为任何活动的主要内容.它不需要PreferenceActivity.请参阅API演示示例

public class FragmentPreferences extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Display the fragment as the main content.
        getFragmentManager().beginTransaction().replace(android.R.id.content,
                new PrefsFragment()).commit();
    }


    public static class PrefsFragment extends PreferenceFragment {

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

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

}  
Run Code Online (Sandbox Code Playgroud)


How*_*son 25

我正在寻找符合这个问题的答案.最后,我从其他几个来源解决了这个问题.对于那些可能仍然希望得到回答的人来说,这对我有用.(注意 - 此项目中的最小和目标SDK都设置为15.)

  1. 转储PreferenceHeaders,你不需要它们.
  2. 使用单页设置创建首选项屏幕.
  3. 创建首选项活动类(下面的SettingsActivity).
  4. 创建一个扩展PreferenceFragment的内联类(下面的LocationFragment).
  5. 在Manifest中定义类.
  6. 启动任务 - 请参阅下面的菜单代码.

显示单个设置屏幕的首选项类.

public class SettingsActivity extends PreferenceActivity {

    private final static String TAG = "SettingsAcitivity";

    public SettingsActivity() {}

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyLog.d(TAG, "onCreate");
        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new LocationFragment()).commit();
    }

    public class LocationFragment extends PreferenceFragment {

        private final static String TAG = "LocationFragment";

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            MyLog.d(TAG, "onCreate");
            addPreferencesFromResource(R.xml.locationsettings);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

显示设置的代码:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    MyLog.d(TAG, "onOptionsItemSelected");
    switch (item.getItemId()) {
    case R.id.menu_main_help:
        break;
    case R.id.menu_main_about:
        break;
    case R.id.menu_main_settings:
        MyLog.d(TAG, "Settings");
        Intent settingsIntent = new Intent(this, SettingsActivity.class);
        startActivity(settingsIntent);
        break;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

Back键终止SettingsActivity.内置的首选例程保存任何更改.onResume函数我有一个getSettings()来更新调用活动使用的任何更改的设置(本例中为MainActivity).

而已.