以编程方式获取Android

时间:2015-11-01 06:36:24

标签: android reflection

在Android中,在按钮的XML onClick属性中指定方法会导致在按钮单击时调用该方法。给定按钮视图,有没有办法找出将以编程方式调用的方法?我已经查看了可用的视图公共方法,但是我找不到任何有关获取可能有用的视图属性的方法。我知道Android在android.view.View$1类中为这样定义的按钮创建了一个onClick监听器,我希望有一种方法可以使用反射来找到我之后的方法。

编辑:我没有构建应用,而是一个监视按钮点击的库。因此,我想弄清楚将要调用哪种方法。我已经知道如何在代码中使用传统的onClick侦听器处理按钮,因此onClick上的XML按钮是我正在处理的最后一个案例。

2 个答案:

答案 0 :(得分:0)

虽然可能,但你真的不应该这样做。

它会让你的应用依赖于框架的内部(私有!)实现,这是一个糟糕的主意。您的应用可能会停止在未来的Android版本中使用。或者甚至只是在某些设备上,如果设备制造商在内部改变某些东西(他们允许这样做)。像更改的变量名这样简单的东西可能会使你的反射代码绊倒。

在这里应该有更好的方法来实现你的目标。

编辑:通过添加的信息和一些额外的想法,我意识到你可以在没有反思的情况下做到这一点。您应该能够在Resources.getLayout(int id)的帮助下解析XML布局,找到相应的按钮ID:s并从每个读取android:onClick值。

答案 1 :(得分:0)

那么,根据您的问题判断,我假设您知道用于分配onClickListerners的XML和编程方法......

但我不明白你为什么要以编程方式更改onClick属性。

如果要动态更改按下按钮时调用的方法,那么可以通过多种方式执行此操作,最简单的方法是使用状态,然后在onClick方法中检查该状态并执行操作因此...

可能有更好的方法来实现这一点,但这是你想要做的吗?