关于listView(列表)的各种使用方法

本文深入讲解了Android开发中ListView的使用方法,包括simpleAdapter、baseAdapter及与Data Binding结合的应用,帮助开发者掌握列表视图的高级操作。

参考链接

https://www.bilibili.com/video/BV1mW411S7ot?p=42

目录

1.listView

2.simpleAdapter

3.baseAdapter

4.关于baseAdapter在binding中的应用

############## 这是栅栏
##############
##############
##############

介绍

listView是一个用来输出列表的view.在手机app中经常要用到列表比如笔记app中每个笔记的显示也是运用listView.

下面来大致介绍各种listView的用法
本文章大致介绍这几种listView方法.simpleadapter,baseAdapter与expandablelistAdapter
其中simpleadapter一般用于简单的列表,虽然可以实现任意的布局,但是无法达到逻辑判断的目的,比如无法让每一个list显示的图片不一样.而baseAdapter基本可以满足所有的需求.

下面先介绍listView的使用(如果只需要输出一个个数据的话,只用listView即可)
##############
##############
##############

listView的使用

1.先生成,将listView拖入到窗口中

在这里插入图片描述

2.接下来创建listView要用到的数据

在res/values文件夹下创建新的xml文件arrays.xml
里面的内容如下

<?xml version="1.0" encoding="utf-8"?>
<resources>
 
    <string-array name="a">
        <item>A</item>
        <item>B</item>
        <item>C</item>
    </string-array> 
</resources>

String-array表示listView要用到的数据集

3.回到listView界面.

可以通过在

<ListView></ListView>

中输入android:entries="@array/a"调用或者在该界面修改

在这里插入图片描述

结果如图

在这里插入图片描述
但是现在很多功能还不能实现,比如一个list中包含多个数据,下面的simpleAdapter可以进一步解决问题
##############
##############
##############
##############
##############
##############

SimpleAdapter的使用

simpleAdapter是一个方法
构造函数为 SimpleAdapter(Context context,List<? Extends Map

其中context为上下文,只需传入this
data为数据源,数据源可以通过map的形式传入
Resource是布局文件的id,因为simpleAdapter已经可以实现简单的布局了,所以另外建一个layout文件出来
from是map对象中的key值
to是要传入上面resource布局文件的view的 id所组成的数组

1.所以先建立data数据源
List<Map<String,?>> inf=new ArrayList<>();   //map
        
        for(int i=0;i<3;i++){
           Map<String, String> temp=new HashMap<>();r
            temp.put("name","feng"+i);
            temp.put("age",10+i+""); 
            inf.add(temp);
        }

上面代码简单添加了几个数据,现在inf可以作为参数传入

2.然后新建立一个layout作为单个列表的格式

示例这里创建一个constraintLayout名为lista
在这里插入图片描述
里面建两个textView(id分别为textView1与textView2)

3.from需要表明要传入变量的id

String[] from={“name”,“age”};

4.int[] to需要表明新创建的layout里面要被赋值的textView的id

Int[] to={R.id.textView1,R.id.textView2}

5.现在创建simpleAdapter

SimpleAdapter simpleAdapter=new SimpleAdapter(this,inf,R.layout.lista,from,to);

6.listView添加该adapter

listView.setAdapter(simpleAdapter);

结果如图
在这里插入图片描述
simpleAdapter基本可以满足大部分简单的需求,而baseAdapter可以实现逻辑编写

##############
##############
##############
##############
##############

BaseAdapter的使用

BaseAdapter为一个抽象类,所以要使用它需要实现一个类出来并实现它的抽象方法

1.先定义列表要显示的数据,这里同simpleAdapter的数据一样
 List<Map<String,?>> inf=new ArrayList<>();   //map
        
        for(int i=0;i<3;i++){
           Map<String, String> temp=new HashMap<>();r
            temp.put("name","feng"+i);
            temp.put("age",10+i+"");
 
            inf.add(temp);
 
        }
2.实现BaseAdapter类
 @Override
        public int getCount() {     //表示列表中的个数 ,即inf中的个数
            return inf.size();
        }
 
        @Override 
        public Object getItem(int position) {        //获取指定位置的东西
            return inf.get(position);
        }
 
        @Override
        public long getItemId(int position) {        //获取指定位置物品的id,此处原样返回即可
            return position;
        }
 
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {    //所有的逻辑书写都在这里
 
			//将lista与该view绑定,之后只要return 该view即可
			 View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.lista,null);
 			
			##########################################################################
			//
			TextView textView=view.findViewById(R.id.textView);
 			textView.setText(inf.get(position).get("name");
 			TextView textView2=view.findViewById(R.id.textView2);
			textView2.setText(inf.get(position).get("age");
 			##########################################################################
            return view;
        }

在井号中间可以插入想要使用的逻辑

3.最后在activity中声明即可
		MyBaseAdapter myBaseAdapter=new MyBaseAdapter();
        listView.setAdapter(myBaseAdapter);

##############
##############
##############
##############
##############

关于BaseAdapter和binding的结合使用

1.创建数据类
public class Data {

    public int a;
    public int b;

}

2.在xml中加入对数据类的引用
  <data>
        <variable
            name="data1"
            type="com.example.viewmodeltest.Data" />
    </data>
3.baseAdapter的getView()方法中改写为下面

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

ListaBinding binding2;    //ListaBinding是lista.xml转换成data binding格式后自动生成的类

//将binding2进行绑定
if(convertView==null){
    binding2= DataBindingUtil.inflate(LayoutInflater.from(this.mContext),R.layout.lista,parent,false);
    convertView=binding2.getRoot();
    convertView.setTag(binding2);
}
else{
    binding2=(ListaBinding) convertView.getTag();
}



 binding2.setVariable(BR.data1,this.data.get(position));    //此方法为数据的传输
 
return convertView;

}

参考链接

https://www.bilibili.com/video/BV1mW411S7ot?p=42

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值