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

Posted

技术标签:

【中文标题】为 listview 定义 onlick:在 listView 级别的 Onclick 与自定义视图适配器内的 Onclick【英文标题】:Defining onlick for listview: Onclick at listView level vs Onclick inside custom view adapter 【发布时间】:2019-06-14 13:12:29 【问题描述】:

在自定义适配器的点击事件处理中,更好(考虑性能和内存),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);
        
    );

//在适配器内部定义点击处理程序。

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


【问题讨论】:

considering performance and memory 为什么你认为在某个地方写代码会影响性能?我更喜欢在适配器中编写点击代码,因为它易于阅读和维护。据我所知,在您定义的业务逻辑没有复杂性(循环)并依次影响性能之前,不会对性能产生任何影响。 【参考方案1】:

首先,列表视图已弃用,请改用 RecyclerView。 对于您的问题,如果单击的处理程序是适配器(例如 1),那么不会创建有利于内存的新对象,并且如果您像在 ex2 中那样设置它 - 每次 getView 函数都会创建新对象被称为哪个不太好。但总的来说它并没有那么贵,所以两个例子都很好。

【讨论】:

这是一些遗留代码,目前我没有摆脱 ListView 的选项。您确定每次调用 getView 函数时都会创建新对象吗?我在想,由于对象类型是最终的并且不能修改,所以对象引用应该简单地保存一个指向 ListView 数组内对象的指针/引用。 no new objects will be created which is good for memory 每次都在哪里创建或不创建新对象??

以上是关于为 listview 定义 onlick:在 listView 级别的 Onclick 与自定义视图适配器内的 Onclick的主要内容,如果未能解决你的问题,请参考以下文章

如何在 QML 中进行基于状态的模型更改

VBA仅使用Onlick单击Internet Explorer [关闭]

公共控件Listview

从 ListView 到其父级的冒泡滚动事件

未调用列表视图中的 xamarin 项目单击

Json 到 ListView - 无法将类型转换为 IEnumerable - Xamarin