setOnItemClickListener和onItemClick之间有什么区别

时间:2016-11-10 12:44:37

标签: java android

我在互联网上搜索并在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
}

先谢谢

3 个答案:

答案 0 :(得分:3)

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

下面:

view.setOnItemClickListener(Listener);

您正在视图中设置监听器。

之后,您必须覆盖onItemClick界面的OnItemClickListener方法,以便遵循提供的合同并对项目点击进行操作。

现在看看你的代码示例:

第一种情况

// 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
    }
});

在此处,您将侦听器设置为您的视图时将其声明为匿名内部类。

PROS:

  • 快速编码

<强> CONS:

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

第二案例

要了解第二个,您必须看到代码必须位于实现View的{​​{1}}内,这就是为什么您可以使用AdapterView.OnItemClickListener

this

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

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

PROS:

  • 可读性
  • 可重用性

缺点:

  • public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //something to do } 成为View不是我的首选方式,我更喜欢有一个只有Listener而另一个只有Listener的课程

答案 1 :(得分:0)

OnItemClickListener 是一个接口,接口有一个属性,实现它的类必须实现其未实现的方法(因为接口包含未实现的方法声明)。

&#34;的 serviceListViewProviderPage.setOnItemClickListener(本); &#34; 在上面的语句中,您需要在类及其未实现的方法中实现 OnItemClickListener ,并将您的类引用提供为此引用作为参数。

新的AdapterView.OnItemClickListener() 在上面的陈述中,您使用的是匿名类。

为了更好地理解你应该阅读接口,匿名类概念,这个参考。

答案 2 :(得分:0)

在第一个案例中,您决定将您的界面OnItemClickListener用作匿名实施(这意味着您可以在那里提供正确的代码,以便一次性使用项目)。

因此,在这种情况下,您可以在调用方法时定义接口实现:

serviceListViewProviderPage.setOnItemClickListener(new AdapterView.OnItemClickListener() {....});

在第二种情况下更简单:

不是编写所有代码一次匿名使用,而是使包含代码implement的类成为您想要的接口(在本例中为AdapterView.OnItemClickListener接口)

因此,当你调用方法时,你会通过&#34;这个&#34;作为参数,因为您的类正在实现该方法所需的接口 事实上,您可以直接在类中定义方法:

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

因此你的类实现了接口,你可以调用:

serviceListViewProviderPage.setOnItemClickListener(this);

在评估如何更好地遵循和使用软件开发的最佳实践指南之后,软件开发人员可以自行决定何时何地使用这些表单

希望这有帮助!