我有一个最初使用 Android Studio 开发的项目。我决定将其转换为 Xamarin (Visual Studio 2015)。
经过数小时移植所有代码后,除了我的设置活动(PreferenceActivity)外,一切正常。我有一些构成设置的 PreferenceFragment,但它们都给了我“无法实例化片段”。这是我得到的例外:
Java.Lang.RuntimeException:无法启动活动 ComponentInfo{test.mypackagename/md50d00e677e41fc49f8b3c16e79df2b77f.SettingsActivity}:android.app.Fragment$InstantiationException:无法实例化片段 test.mypackagename.GeneralPreferenceFragment:确保类名存在、公开且具有一个公开的空构造函数
我一直在网上寻找解决方案,但似乎找不到。我到处看他们都说确保有一个空的公共构造函数,如果它是一个内部类,它必须是静态的。但是我有一个空的构造函数,它不是一个内部类,它在它自己的文件中。
这是我的 SettingsActivity.cs:
namespace test.mypackagename
{
public class SettingsActivity : PreferenceActivity
{
protected override void OnPostCreate(Bundle savedInstanceState)
{
base.OnPostCreate(savedInstanceState);
}
public override void OnBuildHeaders(IList<Header> target)
{
LoadHeadersFromResource(Resource.Xml.pref_headers, target);
}
}
}
这是我的 GeneralPreferenceFragment.cs:
namespace test.mypackagename
{
public class GeneralPreferenceFragment : PreferenceFragment
{
public GeneralPreferenceFragment() { }
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
AddPreferencesFromResource(Resource.Xml.pref_general);
}
}
}
这是我的 pref_headers.xml:
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header android:fragment="test.mypackagename.GeneralPreferenceFragment"
android:title="@string/pref_header_general" />
<header android:fragment="test.mypackagename.OtherPreferenceFragment1"
android:title="@string/pref_header_other1" />
<header android:fragment="test.mypackagename.OtherPreferenceFragment2"
android:title="@string/pref_header_other2" />
<header android:fragment="test.mypackagename.OtherPreferenceFragment3"
android:title="@string/pref_header_other3" />
<header android:fragment="test.mypackagename.OtherPreferenceFragment4"
android:title="@string/pref_header_other4" />
</preference-headers>
这之前工作正常,所以我不确定问题可能是什么。任何帮助将非常感激。