如何正确设置偏好设置活动?

3
我正在设置偏好屏幕,但是我的偏好活动似乎无法正常工作。
我创建了一个名为SettingsActivity的新空白活动,它扩展了PreferenceActivity,并从onCreate方法中删除了setContentView(R.layout.activity_settings);,用addPreferencesFromResource(R.xml.preferences);替换了它。
在我的主活动类中,当我单击默认情况下Android创建的设置按钮时,我设置了一个新意图来调用我的SettingsActivity类。
我向我的preferences.xml中添加了一个测试项,并以此结果运行它。我的导航栏发生了什么?我需要做些什么才能添加它? Android Studio显示addPreferencesFromResource已弃用。我应该怎么办?
调用SettingsActivity的MainActivity方法:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {

        Intent intent = new Intent(this, SettingsActivity.class);
        startActivity(intent);

        return true;
    }

    return super.onOptionsItemSelected(item);
}

设置活动

public class SettingsActivity extends PreferenceActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);
}

这是我的preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen          
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"   
android:layout_height="match_parent">

<CheckBoxPreference
    android:key="test check box"
    android:title="Test"
    android:defaultValue="false"/>

</PreferenceScreen>

你能展示一下你的Java代码和XML布局吗? - Prudhvi
为什么不使用Android Studio的Preference Activity模板来帮助您快速入手呢?您可以根据自己的喜好进行修改。 - Daniel Nugent
这可能会对你有所帮助:https://dev59.com/gl8d5IYBdhLWcg3wt0Ky - dlohani
Daniel,我在创建新活动时,模板列表中没有特定的Preference Activity。它在哪里? - user4212315
1个回答

4
从API 11开始,您应该转换到PreferenceFragment,它允许您拥有一个从ActionBarActivity扩展的Activity(这使您可以获得操作栏)。
public static class SettingsFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

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

public class SettingsActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

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

来源: http://developer.android.com/guide/topics/ui/settings.html#Fragment

本文介绍了在Android应用中使用设置界面的方法。一个设置界面可以由多个片段(Fragment)组成,每个片段对应一个设置界面中的一个选项卡。通过使用PreferenceFragment类和相关API实现设置界面的创建和管理。


1
谢谢!现在它按照我想要的方式工作。 - user4212315
支持库修订存档,修订版22.1.0中,针对v7 appcompat库的更改指出:“将AppCompatActivity更新为使用支持库操作栏功能的活动的基类。此类替换了已弃用ActionBarActivity。” - Eido95

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接