Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 单独定义OnClickListener还是在setOnClickListener()内定义?_Android_Onclicklistener_Getview - Fatal编程技术网

Android 单独定义OnClickListener还是在setOnClickListener()内定义?

Android 单独定义OnClickListener还是在setOnClickListener()内定义?,android,onclicklistener,getview,Android,Onclicklistener,Getview,定义单击侦听器时,我正在填充适配器的getView(),这让我想知道: 性能方面,这两种实现之间是否存在差异: 分别定义onClickListener: 及 将onClickListener定义为参数: 由于经常调用getView(),我的想法是,即使实现上的细微差异也会对应用程序的性能产生很大影响。但我不确定 那么,就性能/内存而言,建议采用上述哪一项?或者说,它们有什么不同吗?这实际上取决于匿名类中有多少onclick侦听器。 最好实现一次单击侦听器,并将其设置为要获取单击事件的所有视图,

定义单击侦听器时,我正在填充适配器的
getView()
,这让我想知道:

性能方面,这两种实现之间是否存在差异:

分别定义onClickListener:

将onClickListener定义为参数:


由于经常调用
getView()
,我的想法是,即使实现上的细微差异也会对应用程序的性能产生很大影响。但我不确定


那么,就性能/内存而言,建议采用上述哪一项?或者说,它们有什么不同吗?

这实际上取决于匿名类中有多少onclick侦听器。 最好实现一次单击侦听器,并将其设置为要获取单击事件的所有视图,并使用OnClick(视图v)中的视图id对单击进行排序


您正在两个代码段中创建OnClickListener,因此如果在getView()中创建,则不会对性能产生任何好处。您可以让您的适配器实现OnClickListener,然后将OnClickListener设置到您的适配器,这样每个视图就不会生成OnClickListener。因此,您的解决方案似乎比上述两种情况都好。另外,我认为传递视图的id而不是视图会使它更加高效。我不确定如何传递int id而不是View对象,因为OnClickListener只有一个方法可以将View作为参数传递。5或6个点击监听器并没有太大的负载,但最好只实现一个视图,并通过视图id来执行特定的操作。是的,你是对的。我的坏(我忘了它是超驰的)。一次onClick也会更干净,因为我的
getView()
看起来很凌乱!
View.OnClickListener mClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View view) { //... }
};
mView.setOnClickListener(mClickListener);
mView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) { //... }
});
public void onClick(View v) {
   switch (v.getId()) {
     case R.id.some_view_id:
        doSomething();
        break;
   }

}