Android开发:ListView控件的使用

概述

本文以之前提到过的账本程序中的记录展示页面为例,记录一下Android ListView的使用方法。

xml文件中声明控件

与其他控件一样,使用ListView首先需要在xml文件中对控件进行声明,具体代码如下:

<ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/lv_show"
        android:layout_marginTop="30dp" />

为了方便展示,这里只设置了一些最基础的属性,大家可以根据需要进行更多的设置。

绘制Item布局

ListView的Item的布局需要我们自己新建一个xml文件,在xml文件中进行UI界面的绘制,以记录展示界面为例,代码如下:

<LinearLayout
        android:layout_width="0dp"
        android:layout_weight="1"
        android:orientation="vertical"
        android:layout_height="100dp">

        <TextView
            android:id="@+id/list_username"
            android:hint="Usernmae"
            android:gravity="center|left"
            android:paddingLeft="15dp"
            android:textSize="22sp"
            android:layout_width="match_parent"
            android:layout_height="50dp"/>

        <TextView
            android:id="@+id/list_time"
            android:hint="time"
            android:gravity="center|left"
            android:paddingLeft="15dp"
            android:textSize="22sp"
            android:layout_width="match_parent"
            android:layout_height="50dp"/>

    </LinearLayout>

    <TextView
        android:layout_width="0dp"
        android:layout_weight="0.5"
        android:layout_height="100dp"
        android:id="@+id/list_count"
        android:hint="¥0"
        android:textSize="32sp"
        android:gravity="center"/>

通过上述代码,我们使每个Item都能展示用户名、记录时间、金额。
上述代码是最简单的一种实现,每个Item的布局都是一样的。如果要实现类似聊天记录这种不同Item布局不同的效果,可以先编写两个Item布局文件(分别对应左对齐、右对齐),具体的实现方法将在下文提到。

编写工具类

账本程序为例,ListView中每一个Item对应SQLite中的一条记录,可以理解为一个Item对应一个对象。因此我们编写一个工具类,该类的属性包括金额、用户名、记录时间,具体代码如下:

public class UpList {
    
    
    private String count, username, time;
    public void setCount(String Count){
    
    
        count = Count;
    }

    public String getCount(){
    
    
        return count;
    }

    public void setUsername(String Username){
    
    
        username = Username;
    }

    public String getUsername(){
    
    
        return username;
    }

    public void setTime(String Time){
    
    
        time = Time;
    }

    public String getTime(){
    
    
        return time;
    }
}

在之后编写的适配器Adapter中,我们将根据这个类具体的属性值去对每一个Item进行具体的设置。

编写适配器Adapter

Adapter的编写是使用ListView中最重要的步骤之一。
首先介绍一下Adapter:Adapter将一个类的接口转换成客户希望的另外一个接口,该模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。通俗来讲,Adapter就相当于一个“转接口”。
接下来进入具体的编程,自己编写的Adapter(以账本程序中的ListAdapter为例)应继承自BaseAdapter。首先,我们编写ListAdapter的构造器:

public ListAdapter(Context context, List<UpList> lists){
    
    
        this.lists = lists;
        this.mContext=context;
        mLayoutInflater= LayoutInflater.from(context);
    }

之后,我们编写ViewHolder:

static class ViewHolder{
    
    
        public TextView mTvUsername, mTvTime, mTvCount;
    }

重写getView方法:

public View getView(int position, View convertView, ViewGroup parent) {
    
    
        final ViewHolder holder;
        UpList entity = lists.get(position);
        if (convertView==null){
    
    
            convertView=mLayoutInflater.inflate(R.layout.layout_list,null);
            holder=new ViewHolder();
            holder.mTvUsername = convertView.findViewById(R.id.list_username);
            holder.mTvCount = convertView.findViewById(R.id.list_count);
            holder.mTvTime = convertView.findViewById(R.id.list_time);
            //设置记录界面
            holder.mTvUsername.setText(entity.getUsername());
            holder.mTvTime.setText(entity.getTime());
            holder.mTvCount.setText("¥" + entity.getCount());
            convertView.setTag(holder);
        }else {
    
    
            holder= (ViewHolder) convertView.getTag();
        }
        return convertView;
    }

代码中的“R.layout.layout_list”就是上文中提到的每个Item对应的布局。在本文中,每个Item的布局都一样。如果要实现类似聊天记录展示的效果,可以编写两个xml文件(效果分别为左对齐、右对齐),然后在getView方法中根据username判断当前记录是否是当前用户发送的,以此来决定此Item的布局是左对齐还是右对齐。
最后,我们重写getCount方法:

public int getCount() {
    
    
        return lists.size();
    }

getCount用来设置ListView中的Item个数,可以是固定值,也可以像上述代码,根据传入的ArrayList的大小来动态设置。

大功告成

上述步骤完成后,我们就能在Activity中使用ListView了。
首先,绑定控件:

mLvShow = findViewById(R.id.lv_show);

然后,调用setAdapter方法:

ListAdapter listAdapter = new ListAdapter(ShowActivity.this, upLists);
mLvShow.setAdapter(listAdapter);

界面效果如下:
界面展示

后记

账本程序的全部源码已经上传啦,没有积分的伙伴也可以关注一下我的个人公众号,然后后台回复“账本”即可获得全部源码~
关注方式:微信搜索“茶迁”或扫描下面二维码:
茶迁

猜你喜欢

转载自blog.csdn.net/weixin_46269688/article/details/117806265