繁体   English   中英

从多个类调用setOnClickListener只会导致一个回调吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM