
[英]Andorid : setOnClickListener does not work when calling Twice
[英]Does calling setOnClickListener from multiple classes result in only one callback?
我希望能够动态地为ListView
更改OnItemClickListener
。 但是, API不清楚这是否可以接受,也不清楚如果我这样做会产生什么结果。
我想要的是,如果我从一个类调用listView.setOnItemClickListener()
,然后再从另一个类调用,那么只有更新的类才能获得回调。
顺便SetOnClickListener()
这个问题也适用于SetOnClickListener()
。
可以实现API以这种方式运行,但是可以实现它,使得调用setOnItemClickListener
所有类setOnItemClickListener
获得回调。
Android API实际实现了哪些行为?
在这里查看AdapterView.setOnItemClickListener()源代码:
/**
* Register a callback to be invoked when an item in this AdapterView has
* been clicked.
*
* @param listener The callback that will be invoked.
*/
public void setOnItemClickListener(OnItemClickListener listener) {
mOnItemClickListener = listener;
}
在Java世界中,通常setter方法将刷新先前的值并将对象的实例变量设置为新值。 所以你所谈论的行为只是最近的一个类获得回调。
它可能实现为调用setOnItemClickListener的所有类都获得回调。
在Java世界中,这也是可能的,在这种情况下,作为一个良好的OOP实践,我们通常将其命名为addOnItemClickListener(),更具体地说,在实际实现中使用侦听器List存储/管理乘法侦听器。 这不是AdapterView.setOnItemClickListener()在API中实现的方式。
您可以根据需要setOnItemClickListener()
,只使用最新的OnItemClickListener。
String className = "MyOnClickListener";
obj = (OnClickListenerInterface)( Class.forName( className).newInstance() );
您必须为侦听器创建一个接口,但是您可以在不同的clasess中实现不同的侦听器,然后动态调用它们中的每一个,如此代码部分所示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.