我正在尝试学习在 Xamarin Android 应用程序中构建首选项页面的方法。
我发现了很多 PreferenceFragment 的例子,但它被标记为已弃用,我在现阶段很难重写它们。
我创建了代表标题的活动。我添加了 IntentFilter,这样我就可以从设置菜单中的应用程序列表访问此活动。它还具有内部类来将一些偏好组合在一起:
namespace droid.examples.Preferences
{
[Activity(Label = "Settings activity", Theme = "@style/AppTheme", Name = "droid.examples.Preferences.SettingsActivity")]
[IntentFilter(new string[] { "android.intent.action.APPLICATION_PREFERENCES" })]
public class SettingsActivity : PreferenceActivity
{
public override void OnBuildHeaders(IList<Header> target)
{
base.OnBuildHeaders(target);
LoadHeadersFromResource(Resource.Xml.preference_headers, target);
}
public class SettingsFragment : PreferenceFragmentCompat
{
public override void OnCreatePreferences(Bundle savedInstanceState, string rootKey)
{
// Load the Preferences from the XML file
SetPreferencesFromResource(Resource.Xml.app_preferences, rootKey);
}
}
}
}
我无法通过从preference_headers.xml中选择“Prefs 1”标头来打开我的app_preferences.xml:
<?xml version="1.0" encoding="utf-8" ?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="Category">
<CheckBoxPreference
android:key="checkbox_preference"
android:title="Developer mode"
android:summary="Allow user to see detailed messages" />
</PreferenceCategory>
</PreferenceScreen>
我有preference_headers.xml。当我单击应用程序名称附近的齿轮时,它会打开。它看起来像这样:
<?xml version="1.0" encoding="utf-8" ?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header android:fragment="droid.examples.Preferences.SettingsActivity.SettingsFragment"
android:title="Prefs 1"
android:summary="An example of some preferences." />
</preference-headers>
我的包名称:droid.examples
我认为有一个问题与 android:fragment 属性值有关。
建立该价值的规则是什么?
我想它必须从“包名称”开始。它应该在类名和包名之间包含命名空间吗?
属性值中的$是什么意思?是用来标记内部类的吗?我在几个地方看到了下一个代码:
android:fragment="com.example.android.apis.preference.PreferenceWithHeaders$Prefs1Fragment"
我希望你能帮我找出我犯了错误的地方。
源代码来自 GitHub https://github.com/Shumigaj/XamarinExamples/tree/59d6af15350a9354e59f716e648bd54d12a5f889