Android 将onclick方法放在适配器之外更好还是没有区别
现在我有一个带有自定义适配器的listview,它扩展了Android 将onclick方法放在适配器之外更好还是没有区别,android,listview,Android,Listview,现在我有一个带有自定义适配器的listview,它扩展了ArrayAdapter。我在getView()中有关于click方法的列表项,但我不禁想知道是否最好像下面的myList.setOnClickListener()那样将其放在activity类中 这对性能有影响吗?最好用第二种方法。虽然你不会注意到有什么不同,除非你有很多东西。所以我会这样做以防万一。最好将它放在列表中,而不是放在单个视图中。getView方法可能会为每个视图调用多次(通常是这样),然后您会为列表的每个视图多次调用方法se
ArrayAdapter
。我在getView()
中有关于click方法的列表项,但我不禁想知道是否最好像下面的myList.setOnClickListener()那样将其放在activity类中
这对性能有影响吗?最好用第二种方法。虽然你不会注意到有什么不同,除非你有很多东西。所以我会这样做以防万一。最好将它放在列表中,而不是放在单个视图中。getView方法可能会为每个视图调用多次(通常是这样),然后您会为列表的每个视图多次调用方法setOnClickListener(毫无用处)
当然,最好在列表中只调用一次,然后每次单击视图时都进行标识
下面是一个小例子
在ListView(或通用视图组)上设置侦听器:
你可以看到区别!如果您不必为ViewGroud的每个视图(ListView、GridView等)专门化应用程序的行为,那么第一种选择当然更好
请记住,在创建接口时,通常会对每个元素多次调用getView方法。如果您执行的操作更少,则性能更高。。。此外,第一个解决方案对我来说更清楚。我认为在getView()
中为项目设置侦听器更好
如果您在适配器的getView()
中设置了一个侦听器,那么每个项目都可以响应事件,直接、独立甚至以与其他项目不同的方式响应事件。因此,您可以设置扩展不同类的不同侦听器来响应事件。但为了避免性能下降,当且仅当项目尚未创建时才为其设置侦听器。您可以使用众所周知的视图持有者方法进行设置。例如如果侦听器的操作与列表的内容密切相关,请在getView()中执行所有操作,这将使其更易于重用,并将相关责任保持在一起
但是,如果侦听器执行的操作更多地与整个活动或片段有关,那么出于同样的原因,在getView方法之外定义并设置侦听器。这就像是OO封装和责任分配的缩影…你能给出每种方法的一个小例子吗
// this one may be called just once
myListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, final int position, long arg3) {
// you have the position of the clicked item, then you know what item has been clicked and you can do some stuff related to that one
}
});
// in the adapter class you have the getView method
@Override
public View getView(int position, View arg1, ViewGroup arg2) {
LinearLayout myLayout = (LinearLayout) mContext.getLayoutInflater().inflate(R.layout.something, null);
//this one is called AT LEAST ONCE on each element of the list...
myLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// Do something
}
});
return myLayout;
}