Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.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 为listview定义onlick:Onclick在listview级别与Onclick在自定义视图适配器内部_Android_Listview_Android Adapter_Android Event - Fatal编程技术网

Android 为listview定义onlick:Onclick在listview级别与Onclick在自定义视图适配器内部

Android 为listview定义onlick:Onclick在listview级别与Onclick在自定义视图适配器内部,android,listview,android-adapter,android-event,Android,Listview,Android Adapter,Android Event,在自定义适配器中,单击事件处理更好(考虑性能和内存),1)在ListView级别定义单击处理程序。2) 在自定义适配器中定义单击处理程序 在自定义适配器级别定义单击处理程序会增加内存消耗吗?。 下面是一些示例伪代码 //在列表级别定义单击处理程序 layoutNotificationViewHolder.mNotificationListLv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Overr

在自定义适配器中,单击事件处理更好(考虑性能和内存),1)在ListView级别定义单击处理程序。2) 在自定义适配器中定义单击处理程序

在自定义适配器级别定义单击处理程序会增加内存消耗吗?。 下面是一些示例伪代码

//在列表级别定义单击处理程序

layoutNotificationViewHolder.mNotificationListLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            final SampleItem selectedItem = itemList.get(position);
            Intent itemInfoIntent = new Intent(context, itemMoreInfoActivity.class);
            itemInfoIntent.putExtra("selected_item", selectedItem);
            context.startActivity(itemInfoIntent);
        }
    });

首先,列表视图是非种族化的,请改用RecyclerView。
对于您的问题,如果单击的处理程序是适配器(ex 1),那么不会创建有利于内存的新对象,如果您将其设置为ex2,则每次调用getView函数时都会创建一个不太好的新对象。但一般来说,它并不昂贵,所以这两个示例都很好。

这是一些遗留代码,目前我没有选择放弃ListView。您确定每次调用getView函数时都会创建新对象吗?我在想,既然对象类型是最终的,不能修改,对象引用应该只是在ListView数组中保存一个指向对象的指针/引用。
不会创建对内存有利的新对象
每次在哪里创建或不创建新对象???
考虑到性能和内存
为什么您认为在某个地方编写代码会影响性能?我更喜欢在适配器中编写点击式代码,因为它易于阅读和维护。据我所知,在您定义的业务逻辑不具有复杂性(循环)并反过来影响性能之前,不会对性能产生任何影响。
public View getView(final int position, View convertView, ViewGroup parent) {

 final SampleItem selectedItem = itemList.get(position);
 convertView.mCameraIv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent itemInfoIntent = new Intent(context, itemMoreInfoActivity.class);
                itemInfoIntent.putExtra("selected_item", selectedItem);
                context.startActivity(itemInfoIntent);
            }
        });

}