我有 PreferenceFragment 和一个 PreferenceActivity ,我以这种方式从 XML 文件中添加标头:
偏好活动
@Override
public void onBuildHeaders(List<Header> target) {
if(DEBUG) Log.i("PreferenceActivity", "onBuildHeaders() -> LogicAnalizerPrefs");
if(android.os.Build.VERSION.SDK_INT >= 12) {
loadHeadersFromResource(R.xml.preference_header_logicanalizer, target);
}
}
偏好片段:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(DEBUG) Log.i("PreferenceFragment", "onCreate() -> LogicAnalizerPrefsFragment");
int res = getActivity().getResources().getIdentifier(getArguments().getString("logicprefsheaders"), "xml", getActivity().getPackageName());
addPreferencesFromResource(res);
}
我拥有标题的 XML 文件是:
R.xml.preference_header_logicanalizer:
<header
android:fragment="com.protocolanalyzer.andres.LogicAnalizerPrefsFragment"
android:icon="@drawable/settings"
android:title="General" >
<extra
android:name="logicprefsheaders"
android:value="logicgeneral" />
</header>
<header
android:fragment="com.protocolanalyzer.andres.LogicAnalizerPrefsFragment"
android:icon="@drawable/settings"
android:title="Canal 1" >
<extra
android:name="logicprefsheaders"
android:value="c1analizerprefs" />
</header>
<header
android:fragment="com.protocolanalyzer.andres.LogicAnalizerPrefsFragment"
android:icon="@drawable/settings"
android:title="Canal 2" >
<extra
android:name="logicprefsheaders"
android:value="c2analizerprefs" />
</header>
<header
android:fragment="com.protocolanalyzer.andres.LogicAnalizerPrefsFragment"
android:icon="@drawable/settings"
android:title="Canal 3" >
<extra
android:name="logicprefsheaders"
android:value="c3analizerprefs" />
</header>
<header
android:fragment="com.protocolanalyzer.andres.LogicAnalizerPrefsFragment"
android:icon="@drawable/settings"
android:title="Canal 4" >
<extra
android:name="logicprefsheaders"
android:value="c4analizerprefs" />
</header>
这是我的 xml 文件之一,用于在单击 Header 时显示首选项之一:
c1analizerprefs.xml:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="@string/AnalyzerProtocolTitle1" >
<ListPreference
android:defaultValue="0"
android:entries="@array/protocolList"
android:entryValues="@array/protocolValues"
android:key="protocol1"
android:summary="@string/AnalyzerProtocolSummary"
android:title="@string/AnalyzerProtocolTitle1" />
<ListPreference
android:defaultValue="1"
android:entries="@array/channelNames"
android:entryValues="@array/protocolValues"
android:key="SCL1"
android:summary="@string/AnalyzerSCLSummary"
android:title="@string/AnalyzerSCLTitle" />
<EditTextPreference
android:defaultValue="9600"
android:title="@string/AnalyzerBaudTitle"
android:key="BaudRate1"
android:summary="@string/AnalyzerBaudSummary"
android:inputType="number" />
</PreferenceCategory>
</PreferenceScreen>
所以在一个大屏幕上,我得到了预期的结果,我只使用一个 PreferenceFragment 来添加我的 4 个标题。
但是我在 XML 中定义的四个首选项(如 c1analizerprefs.xml)几乎相同,唯一的变化是一个数字(例如:Pref.1、Pref.2、...)所以我想在 Java 中添加它们以便我可以使用a for() 添加 4 个或更多首选项 轻松更改重复次数,因为文本始终相同 我只更改一个数字,所以这样我不需要为每个首选项创建一个 XML 文件,我动态创建它们在爪哇。
如何在 Java 中添加首选项而不是使用 XML 文件?在 PreferenceFragment 中,我只有 addPreferencesFromResource() 或 addPreferencesFromIntent()。有什么方法可以添加首选项对象吗?