优秀的手机游戏下载!
首页 如何使用ListView

如何使用ListView

发布时间:2025-02-15 16:47:50 编辑:打包星星 浏览:457

ListView控件的最基本用法是在窗体中以表格形式显示数据,是应用非常广泛的一个窗体控件。控件工具箱在初始状态下是没有ListView控

件的,需要我们在工具-附加控件中勾选\”Microsoft ListView Control,Version

6.0\”,这样ListView控件就会显示在控件工具箱中了。ListView分为表头和数据两部分,而数据部分的第一列和其他列又是分开的,需要用不

同的方式来访问。假设我们在Sheet1中有一个5行4列的表格,现在我们看下怎样将这个表格中的数据导入到ListView控件中。

下面我们先来看怎样给ListView控件添加表头。有两种方法,先来看第一种

Private Sub UserForm_Initialize()

ListView1.ColumnHeaders.Add 1, \”A\”, \”姓名\”, ListView1.Width / 4, lvwColumnLeft \’列数,key,text,宽度,对齐方式,图片

ListView1.ColumnHeaders.Add 2, \”B\”, \”性别\”, ListView1.Width / 4, lvwColumnCenter

ListView1.ColumnHeaders.Add 3, \”C\”, \”年龄\”, ListView1.Width / 4, lvwColumnCenter

ListView1.ColumnHeaders.Add 4, \”D\”, \”住址\”, ListView1.Width / 4, lvwColumnCenter

ListView1.View = lvwReport\’显示方式

ListView1.FullRowSelect = False \’是否整行选取

ListView1.Gridlines = True \’是否显示表格线

End Sub

添加表头的第一种方法是用ColumnHeaders.Add的方法,该方法包括6个参数,比如上面第一行代码中1代表第一列,\”A\”是该列的一个

简称(不写也可以),“姓名”是要显示的文字,下一个参数是宽度,这里我们一共4列,所以第一列宽度设为控件宽度(ListView1.Width)的

1/4,第5个参数是对齐方式,其中第一列必须是左对齐的,其他列可以设置左右或居中对齐,第6个参数是图标索引,我们后面再讲,这里其中所有的参数都是

可省略的,一般写上显示的文字和宽度即可。ListView1.View是设置ListView控件的显示方式,一共四种,这里lvwReport是报表

形式显示,其他的我们后面再讲。FullRowSelect是指可否整行选取,Gridlines是否显示网格线,这些属性自己试下就知道了。

当然我们也可以用循环的方式来简化代码

Private Sub UserForm_Initialize()

Dim i

For i = 1 To 4

ListView1.ColumnHeaders.Add i, , Cells(1, i), ListView1.Width / 4

Next

ListView1.FullRowSelect = True

ListView1.View = lvwReport

ListView1.Gridlines = True

End Sub

对列加了个For循环而已,其实是完全相同的。

下面我们来看怎样向ListView控件中添加数据。两种方法,下面来看第一种

Private Sub CommandButton1_Click()

Dim itm As ListItem, i, List, li

ListView1.ListItems.Clear \’清除数据

For i = 2 To 5

Set itm = ListView1.ListItems.Add \’添加一个空行

itm.Text = Cells(i, 1) \’添加第一列

itm.SubItems(1) = Cells(i, 2) \’添加第二列

itm.SubItems(2) = Cells(i, 3)

itm.SubItems(3) = Cells(i, 4)

Next

End Sub

当然添加新数据之前要把原有数据先删除,用的是ListItems的Clear方法ListItem对象就是控件的行。先用ListItems的

Add方法添加一个空行,用变量itm来表示,下面就要向这个空行中添加数据,我们上面说过第一列和其他列的表示方法是不同的,第一列赋值要用Text,

之后各列用SubItems数组来赋值,第2列序号是1,第3列序号是2,依次类推。

下面来看添加数据的另一种方法,ListSubItems对象

\’ For i = 2 To 5

\’ Set List = ListView1.ListItems.Add(Text:=Cells(i, 1))

\’ Set li = List.ListSubItems.Add(Text:=Cells(i, 2)) \’subitems是个数组,Listsubitems是个对象集合

\’ Set li = List.ListSubItems.Add(Text:=Cells(i, 3))

\’ Set li = List.ListSubItems.Add(Text:=Cells(i, 4))

\’ Next

前面都一样,我只把For循环这段贴出来了,同样是用ListItems.Add新建一个空行,不同的是直接给其赋了一个值,这个值就是赋在第一列

的,之后又用List(刚添加的空行)的ListSubItems的Add方法,相当于在该行添加一个列,再赋值,有几列就添加用个

ListSubItems。ListSubItems和SubItems的区别在于前者是一个对象集合,既然是对象就有可以设置格式(可以和工作表的

Range对象类比),而后者仅仅是一个数组,因此也就不存在格式之类的属性了,所以如果需要给ListView控件改变格式就要用

ListSubItems对象。

如何优化listview

创建继承BaseAdapter并实现其抽象方法的类MyListViewAdapter

说明

下面的讲解中,只创建自定义的适配器类,如何使用请参考android中常用控件的使用之ListView

1.创建类MyListViewAdapter

创建类MyListViewAdapter,该类继承BaseAdapter,并实现其抽象方法:

1

2

3

4

int getCount()

Object getItem(int position)

long getItemId(int position)

View getView(int position,View convertView,ViewGroup parent)

getCount需要返回有多少个item,也就是说最会在listview中展示这么多行

getItem需要返回参数position位置的数据

getItemId返回position就行了

2.给MyListViewAdapter类添加成员变量和构造方法

两个成员变量

1

2

List&ltString&gtlist

Context context

list表示要显示的数据,context变量在生成View对象时需要用到

构造方法:构造方法是为了给两个成员变量赋值

1

2

3

4

public MyListViewAdapter(List&ltString&gtlist , Context context) {

this.list = list

this.context = context

}

3.给getCount,getItem,getItemId方法添加代码

getCount需要返回有多少个item,也就是说最会在listview中展示这么多行,所以返回list.size

getItem需要返回参数position位置的数据,也就是list中第position项的值list.get(position)

getItemId返回position就行了

1

2

3

4

5

6

7

8

9

10

11

12

13

14

@Override

public int getCount() {

return list.size()

}

@Override

public Object getItem(int position) {

return list.get(position)

}

@Override

public long getItemId(int position) {

return position

}

4.给getView方法添加代码

getView方法是返回位置为position的View对象,第二个参数convertView考虑到资源重用问题,在上下滑动的过程中,需要显示某项的时候才会调用getView方法,而如果有某项被隐藏不显示,就会把不显示那一行的View作为convertView参数传入,如果没有某项被隐藏,convertView值为null。可以通过下面代码中的if(convertView!=null)中的输出来看哪一行被隐藏了。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

@Override

public View getView(int position, View convertView, ViewGroup parent) {

System.out.println(\”调用getView方法,显示position=\”+position+\”项\”)

if(convertView!=null){

TextView t = (TextView) convertView.findViewById(R.id.firstTextView)

System.out.println(t.getText())

}else{

LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)

如何使用ListView

convertView = layoutInflater.inflate(R.layout.item_mylistviewadapter, null)

}

TextView t = (TextView)(convertView.findViewById(R.id.firstTextView))

t.setText(list.get(position))

if(position%2==0)

{

t.setBackgroundColor(Color.WHITE)

}

else{

t.setBackgroundColor(Color.GRAY)

}

return convertView

}

补充:通过xml生成View对象

通过Context对象生成一个LayoutInflater对象

调用LayoutInflater对象的inflate方法生成控件对象,inflate方法的第一个参数为xml文件,第二个参数一般为null。返回值为该xml文件最外层的标签对象。

1

2

LayoutInflater layoutInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)

LinearLayout convertView =(LinearLayout)layoutInflater.inflate(R.layout.item_mylistvie

源代码下载

pan.baidu.com/s/1ntuQDdv

Listview与Recycleview的区别

一:概要

众所周知,在开发过程中,ListView的优化是比较重要的那么,如何去优化呢?

如何ListView的提升效率,好像有很多,其实最主要的就是在于adapter中getView方法的优化,那么如何使的getView优化呢?

第一点:

在getView() 中重用了convertView,很大程度上的减少了内存的消耗。通过判断convertView是否为null,是的话就需

要产生一个视图出来,然后给这个视图数据,最后将这个视图返回给底层,呈献给用户。

第二点:

比如:listview 屏幕显示10条数据,当用户滑动listview的时候,第11条数据出现的时候,第一条数据就会被android本身提供

的 Recycler,将这条item(View)放进RecycleBin(回收站)中,然后显示新视图的时候,从RecycleBin中重复用这个View。就

不会造成每次都要去创建新的View,而节约了大量的资源。

第三点:

自身写一个ViewHolder 类,这个ViewHolder,用来标识view中一些控件,方便进行一些事件相应操作的设置,这样就 不用每次 getView() 的View只要找一次控件就好了,不用每次都去寻找。 代码表示如下:

&ltspan &gtpackage com.x1.tools.adapter

import java.util.ArrayList

import java.util.List

import android.annotation.SuppressLint

import android.content.Context

import android.view.LayoutInflater

import android.view.View

import android.view.ViewGroup

import android.widget.BaseAdapter

import android.widget.ImageView

import android.widget.TextView

import com.x1.tools.Config

import com.x1.tools.vo.Coupon

import com.x1.ui.R

/***

* 优惠卷的适配器

*

* @author zengtao 2015年3月31日 上午9:46:08

*/

@SuppressLint({ \”InflateParams\”, \”SimpleDateFormat\” })

public class CouponAdapter extends BaseAdapter {

private List&ltCoupon&gtlist = new ArrayList&ltCoupon&gt()

private Context context

private int[] couponImage = { R.drawable.coupon_image_1,

R.drawable.coupon_image_2 }

private int[] couponRight = { R.drawable.coupon_rightimage }

public CouponAdapter(Context context) {

this.context = context

}

@Override

public int getCount() {

return list.size()

}

@Override

public Coupon getItem(int position) {

return list.get(position)

}

@Override

public long getItemId(int position) {

return position

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

if (convertView == null) {

convertView = LayoutInflater.from(context).inflate(

R.layout.coupon_item_list, null)

ViewHolder vh = new ViewHolder(convertView)

convertView.setTag(vh)

}

ViewHolder viewHolder = (ViewHolder) convertView.getTag()

viewHolder.fillView(getItem(position))

return convertView

}

/**

* 内部类实现查找控件和数据的显示,这样可以实现布局和控件只加载一次

*

* @author zengtao 2015年3月31日 下午1:34:00

*/

class ViewHolder {

public ImageView mCouponImage, mCouponRight

public TextView mCouponMoney, mCouponDisplayMessage, mCouponTime

public ViewHolder(View view) {

mCouponImage = (ImageView) view.findViewById(R.id.coupon_icon)

mCouponRight = (ImageView) view.findViewById(R.id.coupon_righticon)

mCouponMoney = (TextView) view.findViewById(R.id.coupon_money)

mCouponDisplayMessage = (TextView) view

.findViewById(R.id.coupon_message)

mCouponTime = (TextView) view

.findViewById(R.id.coupon_stime_endtime)

}

public void fillView(Coupon coupon) {

Coupon cou = coupon

if (cou.getCoupon_bgimage() == 1) {

mCouponImage.setImageResource(couponImage[0])

} else if (cou.getCoupon_bgimage() == 0) {

mCouponImage.setImageResource(couponImage[1])

}

if (cou.getCoupon_iconimage() == 0) {

mCouponRight.setImageResource(couponRight[0])

}

mCouponMoney.setText(cou.getCoupon_money() + \”元\”)

mCouponDisplayMessage.setText(cou.getCoupon_access())

mCouponTime.setText(Config.formatDate(cou.getCoupon_begintime())

+ \”至\” + Config.formatDate(cou.getCoupon_endtime()))

}

}

// 添加数据

public void addAll(List&ltCoupon&gtlist) {

this.list.addAll(list)

notifyDataSetChanged()

}

// 清空

public void clear() {

list.clear(https://tijian.scykxy.cn#)

notifyDataSetChanged()

}

}

&lt/span&gt

第四点:

分页加载数据,这样获取的数据会比较少,对网络依赖较少,可以很快完成,加载速度很快

第五点:

对ListView做滚动事件处理,当ListView在滚动的过程中,不去加载网络图片,等滚动结束,在加载图片

用法上的区别

1、listview的用法

1)继承的时BaseAdapter,需要重写四个方法

2)不强制使用viewholder

3)可以直接使用item的点击事件

4)不用单独设置分隔线

5)不可以定向刷新某一条数据

2、recycleview的用法

1)继承的是Recycleview.Adapter

2)必须使用viewholder,封装了view的复用

3)使用布局管理器管理布局的样式(横向、竖向、网格、瀑布流布局)

4)点击事件可以使用给控件设置点击事件,也可以自定义点击事件。

5)可以自定义绘制分隔线

6)可以自定义item删除增加的动画效果

7)可以定向刷新某一条数据notifyItemChanged等众多方法

以上就是关于如何使用ListView全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

更多相关资讯

ListView控件的最基本用法是在窗体中以表格形式显示数据,是应用非常广泛的一个窗体控件。控件工具箱在初始状态下是没有ListView控件的,需要我们在工具-…
查看详情
ListView控件的最基本用法是在窗体中以表格形式显示数据,是应用非常广泛的一个窗体控件。控件工具箱在初始状态下是没有ListView控件的,需要我们在工具-…
查看详情
ListView控件的最基本用法是在窗体中以表格形式显示数据,是应用非常广泛的一个窗体控件。控件工具箱在初始状态下是没有ListView控件的,需要我们在工具-…
查看详情
相关资讯
猜你喜欢