当前位置: 首页 > 知识库问答 >
问题:

实例化异常:无法实例化片段以确保类名存在、是公共的并且具有一个空的公共构造函数

江智
2023-03-14

我有一个最初使用Android Studio开发的项目。我决定将其转换为Xamarin(Visual Studio 2015)。

在移植了几个小时的所有html" target="_blank">代码后,除了我的设置活动(PreferenceActivity)之外,其他一切都正常。我有几个PreferenceFragments组成了设置,但它们都给了我“无法实例化片段”。这是我得到的一个例外:

Java语言Lang.RuntimeException:无法启动activity ComponentInfo{test.mypackagename/md50d00e677e41fc49f8b3c16e79df2b77f。SettingsActivity}:android。应用程序。片段$InstantiationException:无法实例化片段测试。mypackagename。GeneralPreferenceFragment:确保类名存在,是公共的,并且有一个公共的空构造函数

我一直在网上寻找解决方案,但似乎找不到。我到处看,他们都说确保有一个空的公共构造函数,如果它是一个内部类,那么它必须是静态的。但是我有一个空的构造函数,它不是一个内部类,而是在它自己的文件中。

这是我的设置活动。反恐精英:

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

这是我的通用优先ragment.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>

这之前运行良好,所以我不确定问题是什么。任何帮助都将不胜感激。

共有1个答案

南宫松
2023-03-14

我认为您遇到了这个问题,因为在您的首选项片段上不使用属性时,它的名称后面会附加Xamarin的MD5和。

因此,为了在pref\u头中实际拥有您期望的名称空间。需要为类指定属性的xml:

[Register("test.mypackagename.GeneralPreferenceFragment")]
public class GeneralPreferenceFragment: PreferenceFragment
{
    // code here
}

编辑:

我刚刚测试了代码,它在我的机器上运行良好。我没有使用任何支持包或任何东西。

pref\u概述。xml

<?xml version="1.0" encoding="utf-8" ?> 
<PreferenceScreen
        xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory
            android:title="durr">
        <CheckBoxPreference
                android:key="checkbox_preference"
                android:title="herp"
                android:summary="derp" />
    </PreferenceCategory>
</PreferenceScreen>

pref\u标题。xml

<?xml version="1.0" encoding="utf-8" ?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
  <header android:fragment="test.mypackagename.GeneralPreferenceFragment"
      android:title="general" />
</preference-headers>

设置活动。反恐精英

[Activity(Label = "SettingsActivity")]
public class SettingsActivity : PreferenceActivity
{
    public override void OnBuildHeaders(IList<Header> target)
    {
        LoadHeadersFromResource(Resource.Xml.pref_headers, target);
    }
}

一般参考片段。反恐精英

[Register("test.mypackagename.GeneralPreferenceFragment")]
public class GeneralPreferenceFragment : PreferenceFragment
{
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        AddPreferencesFromResource(Resource.Xml.pref_general);
    }
}

这工作正常,应用程序首先显示一个常规选项,然后单击它会显示一个标题和CheckBox

即使没有向通用参考片段(GeneralPreferenceFragment)提供任何因子,这也可以工作。但是,您可以尝试添加以下内容:

public GeneralPreferenceFragment()
{
}

public GeneralPreferenceFragment(IntPtr javaRef, JniHandleOwnership transfer)
    : base(javaRef, transfer)
{
}

当应用程序从后台返回或Java世界以某种方式调用类时,通常需要后一个ctor。

 类似资料:
  • 我试图调用一个片段,但有时会收到以下错误,即使我的片段中有空构造函数 作为

  • 我在一些设备上遇到了这个问题,并且在我的崩溃分析中出现了一个错误。当应用程序遇到ANR故障并且错误为 无法启动activity ComponentInfo{com.qwykr.dryver.base/com.qwykr.dryver.base.activities.MainActivity}:Android.support.v4.app.fragment$InstantiationExceptio

  • 我有以下错误。我在DailyVerseFrament上添加了构造函数。但它仍然不起作用。我有这个问题超过一个星期了。

  • -----------这是我的文件服务---------------------我使用的是spring boot 2.2.2 -------这是我的文件控制器-------- 进程已完成,退出代码为%1

  • 我一直遵循这个非常有效的教程,直到我修改了我的,增加了一个构造函数。我现在对决议有问题,不知道该怎么做才能解决这个问题。有没有一种简单的方法来强制它获取无参数构造函数,或者我的方法不正确? 有两个构造函数: 构造函数: 仓库: 代码: WebApiConfig: WebApi调用出错: 系统。无效操作异常:尝试创建SiteController类型的控制器时出错。确保控制器具有无参数公共构造函数。