假设您在 Activity 中定义了 android:onClick="doClick" protected void doClick(View view) { } 文档指出:这个名称必须对应于一个接受 View 类型的单一参数的公共方法。这是底层 Class.getMethod() 方法的一个给定要求,因为文档指出它仅找到公共方法。因此,当使用相同的 API 级别时,为什么这个实现在某些设备和模拟器上能够工作,而在其他设备上不能工作呢?
我调试了特定的实现。 代码的相关部分在支持库中,使用Class.getMethod()。 如文档所述,此方法仅查找公共成员方法并正确运行。由于某种原因,声明为受保护的Activity的所有修饰符(这些是onCreate()和doClick())的修改器都设置为1,这意味着这些实际上是公共的。 我只能在Mac上创建debug版本时观察到这种行为。所以这为什么会发生仍然是一个未解之谜,我正在尝试找到答案。
AppCompatViewInflater.DeclaredOnClickListener
。 - tynngetMethod()
方法只能找到公共方法。我并不是假设稍后调用该方法是不可能的。我只是想知道如何找到非公共方法。答案是该方法无论如何都是公共的。但只在某些设置中。 - tynn