首页 > 其他分享 >ListView

ListView

时间:2023-10-10 12:45:14浏览次数:24  
标签:viewHolder fruit convertView ListView id view

ListView

基本用法

1.创建一个Item类,里面存储的是一条Item的信息

public Fruit{
	private String name;
	private int id;
	...
}

2.创建一个Item的Adapter 继承ArrayAdapter<>并且重载其构造函数和getView方法

public FruitAdapter(@NonNull Context context, int resource, @NonNull List<Fruit> fruits) {
        super(context, resource, fruits);
        resourceId = resource;
    }

上面代码中resource应该是item布局的resource 用于后面查找到单个条目的view并且对其进行操作

@NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        Fruit fruit = getItem(position);
        View view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
        ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
        TextView fruitName =  (TextView) view.findViewById(R.id.fruit_name);
        fruitImage.setImageResource(fruit.getImageId());
        fruitName.setText(fruit.getName());
        return view;
    }

上面的getView是为了构建每一个条目的视图,通过inflate 获取了视图的实体
并且通过findViewById获取控件的实体进行设置
最终返回view

4.创建Item的布局

 <ImageView
        android:id="@+id/fruit_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

 <TextView
        android:id="@+id/fruit_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

5.在父界面中找到ListView的实体并且为其设置Adapter

     ListView listView = findViewById(R.id.lvFruitList);
     listView.setAdapter(new FruitAdapter(this, R.layout.fruit_item, getList()));

其中FruitAdapter构造方法的第二个参数是Item布局的id

提升效率

使用简单的方法实现的ListView的效率较低,所以有一些改进效率的措施

1

在getView界面中判断传入的参数convertView是否为空,如果是空的话,就通过Inflater获取,否则的话,直接复用convertView

if(convertView!=null){
            view = convertView;
}else{
            view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
}

这一步是为了减少view绑定的次数

2 继续优化

Fruit fruit = getItem(position);
        View view;
        ViewHolder viewHolder;
        if (convertView != null) {
            view = convertView;
            viewHolder = (ViewHolder) view.getTag();
        } else {
            view = LayoutInflater.from(getContext()).inflate(resourceId, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
            viewHolder.fruitName = view.findViewById(R.id.fruit_name);
            view.setTag(viewHolder);
        }
        viewHolder.fruitImage.setImageResource(fruit.getImageId());
        viewHolder.fruitName.setText(fruit.getName());
        return view;

这一步是为了减少资源绑定的次数
但是具体为什么可以这么用,不太清楚,后面有机会看看源码

点击事件

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Log.d(TAG, "onItemClick: " + position);
            }
});

标签:viewHolder,fruit,convertView,ListView,id,view
From: https://www.cnblogs.com/baidurenshen/p/17754378.html

相关文章

  • c#开发学习之listview连接SQLserver并将数据放到listview里显示
    usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceW......
  • wpf ListViewItem 怎么设置圆角并有阴影效果,请给出 详细的 xaml代码
    以下是一段详细的XAML代码示例,展示了如何为WPF的ListViewItem设置圆角和阴影效果:<ListView><ListView.ItemContainerStyle><StyleTargetType="ListViewItem"><SetterProperty="Template"><Sette......
  • 进程注入之ListPlanting——滥用listview控件的消息回调函数
    效果:注入代码到“注册表编辑器”(当然,必须是要有listview这种列表显示才可以执行)  ProcessInjection: ListPlanting Othersub-techniquesofProcessInjection(12)看看官方的介绍Adversariesmayabuselist-viewcontrolstoinjectmaliciouscodeinto......
  • listview排序
    intWINAPICustomSortProc(LPARAMItem1,LPARAMItem2,LPARAMParamSort){staticboolb=true;if(b){b=false;return-CompareText(((TListItem*)Item1)->Caption,((TListItem*)Item2)->Caption);}......
  • 【愚公系列】2023年09月 WPF控件专题 ListView控件详解
    (文章目录)前言WPF控件是WindowsPresentationFoundation(WPF)中的基本用户界面元素。它们是可视化对象,可以用来创建各种用户界面。WPF控件可以分为两类:原生控件和自定义控件。原生控件是由Microsoft提供的内置控件,如Button、TextBox、Label、ComboBox等。这些控件都是WPF中常见......
  • Android之ListView详解
    前文ListView作为Android最常用的控件之一,同时也是最难的控件之一,其难点主要在意用法的多变性,因此让众多的初学者都比较难掌握,包括我自己,也是在反复需要使用时,总会卡住.而在网上找了众多的ListView的实例,案例等,讲解得不尽人意,甚至让许多初学者有迷惑.所以才觉得写此文,将......
  • Qt QListView添加数据
    QListView添加数据准备数据QStringListlist;list<<"数据1"<<"数据2";准备模型QStringListModel*model;model=newQStringListModel(this);将数据添加到模型中model->setStringList(list);为QListView添加数据模型ui->listView->setMode......
  • ListView中Button事件
    为了解决ListView中Item里的Button独立事件响应,可以采用以下方法:在BaseAdapter的getview里添加加粗代码:<spanstyle="font-size:14px;">@Override publicViewgetView(intposition,Viewview,ViewGrouparg2){ view=layoutInflater.from(context).inflate( R.layo......
  • View与Widget,以QListView与QListWidget为例
    目录View与Widget的区别和联系如何正确使用QListView与QListWidget使用QListView:使用QListWidget:代码演示总结在Qt框架中,"View"与"Widget"是两个关键概念,它们在用户界面设计和数据展示中发挥重要作用。本篇博客将介绍"View"和"Widget"的区别与联系,然后使用Qt中的QListView和QList......
  • C#里面设置ListView单列(某个单元格的样式:颜色和字体等
    C#里面设置ListView单列(某个单元格的样式:颜色和字体等)。                ListViewItemlvi=newListViewItem((i+1).ToString());               lvi.UseItemStyleForSubItems=false;                ListViewItem.......