如何正确设置首选项活动?

时间:2015-02-26 03:58:03

标签: java android

我正在设置我的偏好设置屏幕,但我似乎无法让我的偏好设置正常工作。

我创建了一个名为SettingsActivity的新空白活动,该活动扩展了PreferenceActivity并从setContentView(R.layout.activity_settings);方法移除了onCreate,并将其替换为addPreferencesFromResource(R.xml.preferences);

在我的主要活动课程中,当我点击Android默认创建的设置按钮时,我设置了一个新的意图来调用我的SettingsActivity类。

我在我的preferences.xml添加了一个测试项目并使用此结果运行它。导航栏发生了什么变化?我必须做些什么来添加它吗? Android Studio显示已弃用addPreferencesFromResource。我该怎么办?

enter image description here

调用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);
}

SettingsActivity

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>

1 个答案:

答案 0 :(得分:5)

从API 11开始,您应切换到PreferenceFragment,这样您就可以Activity延伸ActionBarActivity(这会为您提供操作栏)。

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