Android ListView的使用方法

⌚Time: 2022-08-25 21:52:01

👨‍💻Author: Jack Ge

安卓手机大多数作为竖屏滚动设备,ListView是最重要的控件之一,下面介绍如何使用ListView控件

首先在Activity的布局文件中加入ListView控件

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical">



    <ListView

        android:id="@+id/listView"

        android:layout_height="match_parent"

        android:layout_width="wrap_content"/>

</LinearLayout>

新建立ListView列表项的布局文件,包含一个textview控件,用于显示文本

list_item.xml


<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent">



    <TextView

        android:id="@+id/textView"

        android:layout_width="match_parent"

        android:layout_height="55dp"

        android:layout_marginLeft="5dp"

        android:layout_marginRight="5dp"

        android:textSize="25sp" />

</RelativeLayout >


新建一个java类ListItem,保存每一个列表项的数据,添加setter和getter方法

ListItem.java


package com.example.myapplication;



public class ListItem {

    private int id;

    private String text;



    public int getId() {

        return id;

    }



    public String getText() {

        return text;

    }



    public void setId(int id) {

        this.id = id;

    }



    public void setText(String text) {

        this.text = text;

    }

}


添加一个ListView的适配器类ListViewAdapter ,继承自BaseAdapter ,覆写其中的所有接口函数

ListViewAdapter.java


package com.example.myapplication;



import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.TextView;



import java.util.List;



public class ListViewAdapter extends BaseAdapter {



    private List<ListItem> labels;

    private Context context;



    public ListViewAdapter(List<ListItem> labels, Context context) {

        this.labels = labels;

        this.context = context;

    }



    @Override

    public int getCount() {

        return labels.size();

    }



    @Override

    public Object getItem(int position) {

        return labels.get(position);

    }



    @Override

    public long getItemId(int position) {

        return position;

    }



    @Override

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

        //position 获取convertView的位置

        //convertView ListView中的列表项

        //parent ListView控件

        //判断是否为空指针并且设置使用自定义的列表项布局

        if(convertView == null){

            convertView = LayoutInflater.from(context).inflate(R.layout.list_item,null,false);

        }

        获取列表项布局中的textview控件

        TextView textView= (TextView)convertView.findViewById(R.id.textView);

        //设置控件显示的文本

        textView.setText(labels.get(position).getText());

        //返回视图

        return convertView;

    }

}


在Activity中为list view添加适配器和监听事件

MainActivity.java


package com.example.myapplication;



import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ListView;

import android.widget.Toast;



import java.util.ArrayList;

import java.util.List;



public class MainActivity extends AppCompatActivity {



    private List<ListItem> labels = new ArrayList<>();

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        //创建列表项

        for(int i = 0;i<10;i++){

            ListItem listItem = new ListItem();

            listItem.setText("Item "+String.valueOf(i));

            labels.add(listItem);

        }

        //获取listview控件

        ListView listView = (ListView)findViewById(R.id.listView);

        //创建适配器

        final ListViewAdapter listViewAdapter = new ListViewAdapter(labels,this);

        //设置适配器

        listView.setAdapter(listViewAdapter);

        //添加列表项点击事件监听

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override

            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                ListItem listItem1 = (ListItem) listViewAdapter.getItem(position);

                //提示点击项内容

                Toast.makeText(getBaseContext(),"you are clicking "+listItem1.getText(),Toast.LENGTH_SHORT).show();

            }

        });



    }

}


结果: