在这里,我有一个显示应用程序首选项的代码示例。第一个代码是扩展PreferenceFragment的类,第二个代码是扩展PreferenceActivity的类。
PreferenceScreen xml:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference
android:key="my_nickname"
android:title="Enter your nickname"
android:summary="Here you need to enter your nickname if you want to change it">
</EditTextPreference>
<ListPreference
android:key="color_key"
android:title="Favorite color"
android:summary="What is your favorite color to change your color preference"
android:entries="@array/favorite_colors"
android:entryValues="@array/colors_numbers"
android:defaultValue="1"/>
<CheckBoxPreference
android:key="notification_key"
android:title="I want to receive a notification"
android:summary="If you check this you will receive a notification"
android:defaultValue="false"/>
</PreferenceScreen>
扩展PreferenceFragment类:
import android.os.Bundle;
import android.preference.PreferenceFragment;
public class CustomPreferenceWithFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
扩展PreferenceActivity类:
import android.preference.PreferenceActivity;
import android.os.Bundle;
public class CustomActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new CustomPreferenceWithFragment())
.commit();
}
}
问题:
答案 0 :(得分:1)
两者都或多或少提供了相同的方法来编辑应用程序的内部SharedPreferences,这些应用程序是使用addPreferencesFromResource
从文件加载的
我感觉the documentation summarizes best
如果您的应用支持的Android版本低于3.0(API级别10和更低),则必须将活动构建为PreferenceActivity类的扩展。
在Android 3.0及更高版本上,您应该改用传统的Activity,该Activity承载显示您的应用设置的PreferenceFragment。但是,当您有多组设置时,也可以使用PreferenceActivity为大屏幕创建两窗格布局。
话虽这么说,Android已经发展到远远超过3.0 API,所以可以将PreferenceActivity视为已弃用。甚至在3.0之前的版本中,我相信都有一个带有PreferenceFragment类的支持库。
android.R.id.content是什么意思
它是屏幕的根元素-Android: What is android.R.id.content used for?
为什么这里的片段未与Activity类(扩展Activity或AppCompatActivity)而不是PreferenceActivity连接
好吧,PreferenceActivity
确实扩展了Activity类,因此,如果仅加载片段,则没有真正的理由使用该特定类。
答案 1 :(得分:0)
在这里,我总结了对这个问题的所有调查: 阅读Settings的文档后,我意识到在示例中,我可以将PreferenceActivity替换为常规Activity,并且一切正常。 实际上,Android文档说,如果我正在为Android 3.0(API级别11)及更高版本开发,并且PreferenceActivity用于低于11的API,则应该使用PreferenceFragment。 在本例中,我应按原样使用PreferenceFragment,但我将片段添加到Activity并扩展了PreferenceActivity的类,尽管我应该使用基本的Activity。 这是我向“活动”添加片段的新代码:
import android.app.Activity;
//import android.preference.PreferenceActivity;
import android.os.Bundle;
public class CustomActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new CustomPreferenceWithFragment())
.commit();
}
}
感谢cricket_007的解释和文档。