- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在构建一个使用此处找到的定制 TwoDScrollView 的 Android 应用程序:
http://blog.gorges.us/2010/06/android-two-dimensional-scrollview/
可以在其他几个网站上找到该类的引用,Stack Overflow 上的其他人也提出了有关它的问题。我在以前使用 Java/Eclipse 构建的 Android 应用程序中使用它,并且取得了成功。
在我当前的应用程序中,我想使用 C# 和 MonoDroid。我决定用 C# 重写整个 TwoDScrollView 类。重写它,然后在一些布局 XML 中使用它后,尝试运行我的代码时出现以下异常:
System.NotSupportedException has been thrown. Unable to activate instance of type MyProject.TwoDScrollView from native handle 44f4d310.
System.Exception: No constructor found for MyProject.TwoDScrollView::.ctor(System.IntPtr, Android.Runtime.JniHandleOwnership) ......with more text that follows....
我的布局XML如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<myproject.TwoDScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</myproject.TwoDScrollView>
</RelativeLayout>
按照以下链接中有关在 MonoDroid 中使用布局 XML 中的自定义 View 的说明:http://docs.xamarin.com/android/advanced_topics/using_custom_views_in_a_layout
TwoDScrollView 类的构造函数如下所示:
public TwoDScrollView(Context context)
: base(context)
{
initTwoDScrollView();
}
public TwoDScrollView(Context context, IAttributeSet attrs)
: base(context, attrs)
{
initTwoDScrollView();
}
public TwoDScrollView(Context context, IAttributeSet attrs, int defStyle)
: base(context, attrs, defStyle)
{
initTwoDScrollView();
}
C# 版本中存在与 Java 版本中相同的构造函数(您可以在上面的链接中找到)。知道可能出了什么问题吗?如果有人愿意,我可以发布我的 TwoDScrollView 的完整 C# 代码。它基本上与 Java 代码一点一点的相同——除了用 C# 重写。
感谢您的帮助!
最佳答案
恭喜!你遇到了一个泄漏的抽象。 :-/
问题是这样的:for better or worse ,来自构造函数的虚方法调用调用最派生的方法实现。 C#在这方面与Java相同;考虑以下程序:
using System;
class Base {
public Base ()
{
Console.WriteLine ("Base..ctor");
M ();
}
public virtual void M ()
{
Console.WriteLine ("Base.M");
}
}
class Derived : Base {
public Derived ()
{
Console.WriteLine ("Derived..ctor");
}
public override void M ()
{
Console.WriteLine ("Derived.M");
}
}
static class Demo {
public static void Main ()
{
new Derived ();
}
}
运行时,输出为:
Base..ctor
Derived.M
Derived..ctor
也就是说,Derived.M()
方法在 Derived
构造函数执行之前被调用。
在 Mono for Android 中,事情变得更加...复杂。 Android Callable Wrapper (ACW)的构造函数由 Java 调用并负责创建 peer C# instance and mapping the Java instance to the C# instance . 然而,如果从 Java 构造函数中调用了一个虚方法,那么该方法将在有一个 C# 实例调用该方法之前被调度!
让它沉下去一点。
我不知道哪种方法会触发您的特定代码的场景(您提供的代码 fragment 可以正常工作),但我们确实有一个适用于这种场景的示例:LogTextBox overrides TextView.DefaultMovementMethod属性(property),以及 TextView
constructor invokes the getDefaultMovementMethod()
method .结果是 Android 尝试在 LogTextBox
实例甚至存在之前调用 LogTextBox.DefaultMovementMethod
。
那么 Android 的 Mono 有什么作用? Mono for Android 创建了 ACW,因此知道应该将 getDefaultMovementMethod()
方法委托(delegate)给哪个 C# type。它没有实例,因为尚未创建实例。因此,Android 的 Mono 会通过 (IntPtr, JniHandleOwnership)
构造函数创建适当类型的实例,如果找不到该构造函数,则会生成错误。
一旦(在这种情况下)TextView
构造函数完成执行,LogTextBox
的 ACW 构造函数将执行,此时 Mono for Android 将“啊哈!我们'已经为这个 Java 实例创建了一个 C# 实例”,然后然后在已经创建的实例上调用适当的构造函数。这意味着对于单个实例,将执行两个构造函数:(IntPtr, JniHandleOwnership)
constructor ,和(后来)(Context, IAttributeSet, int)
constructor .
关于android - MonoDroid : Error when calling constructor of custom view - TwoDScrollView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10593022/
我在大学学习C++时学习了这段代码..后来我在C#中使用了同样的东西...但现在我想在Java中使用它...我在互联网上寻找类似的东西,但我什至不知道如何表达它,以便我得到正确的结果。 所以嗯,请让我
我正在我的 Ruby on Rails Controller 上运行 RSPEC 测试,这是我正在测试的 Controller 操作: Controller 代码: class Customers::
想为我选择的选项卡设置自定义背景,到目前为止,子类化是我自定义 UITAbBar/UITabBarItem 的方式。 问题是:有谁知道(或知道我在哪里可以找到)设置背景的属性是什么? 所选选项卡周围有
您好,我在 commerefacades-beans.xml 中创建了 eProductForm bean,我添加了 ProductData 的自定义属性。 然后在commercewebs
我有两个表:1. 客户2. customer_order 客户表包含客户数据(duh),customer_order 包含所有订单。我可以在 customer.id=customer_order.id
在我的 TableView 中,我有一个 NSMutableArray *currList 的数据源 - 它包含对象 Agent 的对象。我创建了自定义的 TableCell 并正确设置了所有内容。我
是否建议使用自引用泛型继承? public abstract class Entity { public Guid Id {get; set;} public int Version
我正在尝试为我的 Grafana 安装使用自定义文件 ( custom.ini )。不幸的是,这不起作用。 我做了什么: 安装了一台装有 CentOS 7 的虚拟机 添加了 Grafana Yum R
我被分配了两个给定类的作业,一个是抽象父类 Lot.java,另一个是测试类 TestLots.java。我不应该编辑其中任何一个。任务是创建Lot的两个子类,使TestLots中的错误不再是错误。
我是 Botpress 的新手。 我刚刚安装了 Botpress 的最新版本“botpress-ce-v11_0_1-win-x64”。 我浏览了文档,发现了一些关于内容类型、内容元素和内容渲染的解释
我一直在四处寻找,但我还没有找到任何东西,除了 Qt3 的旧文档和 qt 设计器的 3.x 版。 我会举个例子,并不是因为我的项目是 GPL 而不能提供代码,而是为了简单起见。 示例:您正在为您的应用
场景 我有一个自定义规则来验证订单的运费: public class OrderValidator : BaseValidator { private string CustomInfo {
我有用于身份验证的自定义拦截器: @Named("authInterceptor") @Provides @Singleton fun providesAuthIntercep
如果有人没有添加照片,我想显示默认头像图像。我假设我需要在模型或助手中执行自定义 getter。 如果我做 getter,它会看起来像这样吗: def avatar_url "default_ur
我正在使用 Google Search API,但遇到了一些麻烦。这个请求(在 Python 中,使用 requests 库)工作正常 res = requests.get("https://www.
我使用 MSKLC 制作了自定义键盘布局。 我以为我仔细按照说明操作了chose appropriate values对于LOCALENAME和 LOCALID参数。 但是,在通过按 Win+Spac
我正在使用 simpleframework解析 XML 字符串并将其转换为对象。 Serializer serializer = new Persister(); try { Customer
我正在使用 C# 控制台应用程序从 MySql 数据库获取一些数据,但在正确查询时遇到一些问题 现在的情况: SELECT * FROM Customer WHERE EXISTS ( SELECT
我在我的 iPhone 4S 上运行我的应用程序,我正在使用自定义表格 View Controller 和自定义表格 View 单元格,当我将表格 View 向上滑动到空白区域并同样向下滑动到空白区域
我有一个自定义的 JavaScript 变量,它正在检查 eventAction 是什么,这样我就可以知道是否触发一些转换像素。自定义 Javascript 称为“FacebookConversion
我是一名优秀的程序员,十分优秀!