Android setOnItemClickListener vs setOnClickListener

时间:2015-02-03 09:17:03

标签: android listview onclicklistener onitemclicklistener

据我所知,有两种方法可以处理点击不同的列表项:

  1. 使用setTag()为适配器中的列表项设置类型,然后使用setOnItemClickListener()列表和getTag()来区分类型,如下所示:
  2. listview.setOnItemClickListener(new OnItemClcikListener(){});

    1. setOnClickListener()期间,适配器内部getView()分别为每个项目添加item.setOnClickListener(new OnClickListener() {});,如下所示:
    2. {{1}}

      有什么区别,哪一个更受欢迎?

2 个答案:

答案 0 :(得分:3)

OnItemClickListener相比,

OnClickListener非常易于管理。 如果您仍然愿意管理OnClickListener,我会说明为什么OnItemClickListenerOnClickListener好得多。

一旦开始滚动ListView项目将开始重复使用,您最终会创建大量OnClickListener。不要担心,这不是内存泄漏,因为GC将会出现并收集这些内容,但您也不应该感到安全,因为GC pauses your activity即使它只是相当大的一小部分。< /强>

除非您为单个列表项计划了不同的内容,否则我会使用OnItemClickListener

如果您需要创建每个项目的特定部分是可点击的,或者希望为给定项目执行多个操作,那么最好尽可能将这些操作收集到一次创建的OnClickListener中,然后附加到getView()中的每个项目。您可以通过附加有关单击操作的元数据来区分单击的项目,也可以使用setTag()将位置列表到视图本身。

答案 1 :(得分:0)

我不确定我真的明白你的意思,但我会尽力回复你。

  

使用setTag()为Adapter中的列表项设置类型,然后为列表设置setOnItemClickListener(),并使用视图的getTag()来区分类型,如下所示:   listview.setOnItemClickListener(new OnItemClcikListener(){});

您可以使用setTag()设置Object标签,这意味着您可以使用它将一些信息放入您的单元格视图中(例如:text,id等)。 为了“区分视图的类型”,我建议你使用`getViewTypeCount()。

  在适配器内部,在getView()期间为每个项单独设置setOnClickListener(),如下所示:   item.setOnClickListener(new OnClickListener(){});

这实际上更多地取决于您要对列表执行的操作,如果单击的行为与属于您的适配器的信息严格相关,或者例如,如果您在单元格视图中有一个按钮,则设置一个适配器内部单元视图的监听器可能是一个很好的解决方案。 但是除了最后一种情况,我会说第一种情况是最好的解决方案,因为你可以将你想要的所有内容放入你的标签中,它让你有机会从主Activity或{{1}管理你的列表点击。 }}