【问题标题】:How do you determine when interface methods are invoked at Runtime?您如何确定何时在运行时调用接口方法?
【发布时间】:2018-08-29 02:06:22
【问题描述】:

考虑一下documentationfor OnTouchListener 这很清楚:

在将触摸事件分派到视图时调用。

完美!我得到它。我正在寻找这种关于接口方法的描述,这些方法可以重载以创建自定义动画、行、适配器/任何东西。

以适配器接口的 getView() 方法的 documentation 为例说明我的困惑。我的理解是,只要适配器需要一个新视图,Android就会调用getView(),比如当你滚动一个列表视图并添加一个新单元格时。但我不明白如何从文档中得出这个结论。

对于 getView() 它看起来很直观。但我不认为像 SectionIndexor 这样的其他接口。我经常为重载接口方法而苦恼,因为我无法弄清楚它们在运行时是如何交互的。这有记录吗?

【问题讨论】:

  • 当您的 ListView 尝试为其 ListItems 设置模板视图时会调用 GetView,因此基本上所有与单元格创建相关的内容都会添加到此
  • 谢谢,你是怎么学会的?也许我的问题太笼统了,但我想知道如何确定接口或基类方法如何交互。作为最近的示例,我试图为列表视图创建索引。文档显示了接口方法的作用,但我需要在网上找到示例才能发现它们实际上是如何交互的。 (我不是在寻找有关 ISectionIndex 的说明,而是我迷失了人们是如何从文档中弄清楚这些事情的)
  • 嗯,这很简单,您需要先了解 c# 以及原生 android 的一些背景知识,才能知道需要做什么,例如有一个触摸监听器,现在既然它是一个监听器,那么您应该知道它是一个接口,那就是android,现在匿名类不能在xamarin android它的C#中使用
  • 您还可以检查 c# 对象浏览器以了解特定属性返回类型是什么,然后使用它来了解您需要做什么。
  • 感谢您的帮助。抱歉,我不认为我的问题是公正的,我编辑了我的原始帖子。我正在寻找关于接口方法如何交互以及它们在运行时如何相互关联的描述......或者只是一种我可以为自己找出这些信息的方法

标签: java android xamarin.android android-runtime


【解决方案1】:

微软文档定义了一个接口如下:

接口包含类或结构可以实现的一组相关功能的定义。

Java 和 C# 接口存在细微差别,可在 here 中找到。 (假设您有 Java 背景)

现在您在抽象类的重写方法和接口方法之间产生了混淆。 Check the difference here

GetView 方法是Android 抽象类BaseAdapter 的一个方法。 因此要获得有关信息,首先您需要查看 BaseAdapter 然后在其中找到 GetView 方法。在那里你可以得到该方法的准确描述以及它的作用。注意:Xamarin.Android 的工作方式与本机 Android 完全相同,因此您可以使用相同的文档来了解这些方法。

注意:从 C# 到 Java 的实现有所不同。

现在接口的一个例子是 IOnMapReadyCallback,它被 Xamarin.Android 用作回调来检查地图是否可以使用。

现在 C# 中的接口按照它们的命名约定以 I 开头。 eg:Android java OnTouchListener 接口变成 Xamarin Android 中的 IOnTouchListener 等等。

现在,如果您使用接口方法,则该方法只是被定义,并且您必须在继承它的类中使用该方法,因此该方法将被添加到该类中并且不会被覆盖类似于抽象类的方法。

现在,如果您想了解何时调用接口方法,您需要查看该接口的 Android 文档,例如 OnMapReadyCallback,然后找到您需要了解的方法,即 onMapReady

万一你不明白,请回复。

祝你好运!

编码愉快。

【讨论】:

  • 哇,感谢您的支持!因此,在 GetView 方法的示例中,通过文档对其进行跟踪:抽象类 BaseAdapter 实现了 ListAdapter 接口,该接口实现了需要 GetView() 方法的适配器接口......但在文档中我没有看到任何关于何时在运行时调用该方法的规范:developer.android.com/reference/android/widget/…
  • 就像您发布的示例一样,我可以在文档中看到 onMapReady() 方法在地图准备好使用时被调用。我找不到 getView() 方法的类似描述。也许只是我觉得文档太模糊了,但是如果仅此而已,那么我想就是这样!
  • 嗯,对我来说,它的描述似乎足以理解它的作用,而且可能它因人而异,只是我的观点,以防万一你什么都不懂总是在这里问,而且 getview 也没有提到同样的原因,因为众所周知,arrayadapter getview 被调用来获取当前视图的模板
猜你喜欢
  • 2015-12-17
  • 2015-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
相关资源
最近更新 更多