我希望能够动态更改OnItemClickListener
ListView
。但是,API并不清楚这是否可以接受,也不清楚如果我这样做会产生什么结果。
我想要的是,如果我从一个类调用listView.setOnItemClickListener()
,然后再从另一个类调用,那么只有最近的类才能获得回调。
这个问题顺便提一下也适用于SetOnClickListener()
。
可以实现API以这种方式运行,但也可以实现它,以便所有调用setOnItemClickListener
的类都获得回调。
Android API实际实现了哪些行为?
答案 0 :(得分:9)
查看AdapterView.setOnItemClickListener()源代码here:
/**
* 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(),更具体地说,在实际实现中使用Listener List / manage multiply listener。这不是AdapterView.setOnItemClickListener()在API中实现的方式。
答案 1 :(得分:4)
您可以根据需要随意setOnItemClickListener()
,只使用最新的OnItemClickListener。
答案 2 :(得分:0)
String className = "MyOnClickListener";
obj = (OnClickListenerInterface)( Class.forName( className).newInstance() );
您必须为侦听器创建一个接口,但是您可以在不同的clasess中实现不同的侦听器,然后动态调用它们中的每一个,如此代码部分所示。