gpt4 book ai didi

java - setOnItemClickListener 和 onItemClick 有什么区别

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:50 24 4
gpt4 key购买 nike

我上网查了下Google Android Help Centre上的文档,但是现在我还是不清楚这两者有什么区别,什么时候会在什么情况下使用?我通过堆栈溢出没有找到任何详细的答案。

serviceListViewProviderPage.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//something to do
}
});

serviceListViewProviderPage.setOnItemClickListener(this);
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//something to do
}

提前致谢

最佳答案

两者相同但声明和使用不同。首先,让我们看看我们在做什么。

这里:

view.setOnItemClickListener(Listener);

您正在您的 View 中设置一个监听器。

之后,您必须重写OnItemClickListener 接口(interface)的onItemClick 方法,以便按照提供的契约(Contract)对项目点击进行操作。


现在查看您的代码示例:

第一个案例

// set a listener to your wiew                 
serviceListViewProviderPage.setOnItemClickListener(
// create a new OnItemClickListener
new AdapterView.OnItemClickListener() {

@Override
//
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//something to do
}
});

在这里,当您将监听器设置为您的 View 时,您将监听器声明为匿名内部类。

优点:

  • 快速编码

缺点:

  • 如果方法中的逻辑太长或者interface有很多方法,你会失去可读性
  • 您不能重用 Listener 中的逻辑
  • can cause memory leaks (感谢@Murat K)

第二种情况

要理解第二个,您必须看到代码必须在实现 AdapterView.OnItemClickListenerView 中,这就是您可以使用 this 的原因

// here you set the class itself as a listener
serviceListViewProviderPage.setOnItemClickListener(this);

但是,只要您必须遵循接口(interface)的约定,该类就必须实现该方法:

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//something to do
}

优点:

  • 可读性
  • 可重用性

缺点:

  • View 也成为 Listener 不是我喜欢的方式,我更喜欢有一个只有 Listener 的类并且另一个只是一个 View

关于java - setOnItemClickListener 和 onItemClick 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40527971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com