一、基本概念
- 它主要用于以列表的形式展示数据。想象一下手机通讯录,其中一个个联系人信息以垂直排列的方式呈现,这就是 ListView 的典型应用场景。用户可以方便地浏览列表中的各项内容。
二、功能特点
- 数据展示多样性
- 它能够展示各种类型的数据,如简单的文本列表(例如,待办事项列表,每个事项就是一个文本项)、包含图标和文本的组合项(像应用商店中的应用列表,有应用图标和应用名称)。
- 可以展示来自不同数据源的数据,如从数据库中读取的用户信息、从网络请求获取的新闻列表等。
- 滚动功能
- 当列表中的数据项较多,无法在一屏内全部显示时,ListView 提供了滚动功能。用户可以通过手指滑动(在触摸设备上)或者鼠标滚轮(在桌面设备上)来浏览列表中的其他项。
- 用户交互性
- 支持多种用户交互方式。例如,用户可以点击列表中的某一项,触发相应的操作,如打开一个新的页面来查看该项的详细信息,或者在选中多项后进行批量删除等操作。
三、案例展示
显示水果列表,点击后下方提示水果名称以表示该行被点击
先对activity_main.xml进行修改
<?xml version="1.0"encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android''
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/list_view''
android:layout_width="match_parent"
android:layout_height=“match_parent"/>
</LinearLayout>
为fruititem创建xml文件
<?xml version="1.0"encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android''
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/fruit_name"
android:layout_width="wrap_parent"
android:layout_height="wrap_parent"
android:gravity="center_vertical"
android:layout_marginLeft="10dp"/>
</LinearLaylout>
为fruit创建构造方法
public class Fruit {
private String name;
private int ImageId;
public Fruit(String name, int imageId){this.name = name;
this.imageId =· imageId;
public String getName(){
return name;
public int getImageId(){
return imageId;
}
}
创建FruitAdapter类
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
// 自定义的适配器类,继承自ArrayAdapter<Fruit>,用于将Fruit数据适配到特定的视图展示,比如在ListView等列表组件中展示Fruit相关信息
public class FruitAdapter extends ArrayAdapter<Fruit> {
// 用于存储布局资源的ID,这个布局资源定义了每个列表项的外观样式等
private int resourceId;
// 构造函数,用于初始化FruitAdapter
public FruitAdapter(Context context,
int textViewResourceId,
List<Fruit> object) {
// 调用父类(ArrayAdapter)的构造函数,传入上下文、布局资源ID以及要展示的数据列表(这里是Fruit类型的列表)
super(context, textViewResourceId, object);
// 将传入的布局资源ID赋值给类成员变量resourceId,方便后续使用
resourceId = textViewResourceId;
}
// 重写ArrayAdapter的getView方法,用于创建和返回每个列表项对应的视图
public View getView(int position, View convertView, ViewGroup parent) {
// 通过传入的位置参数position,从数据列表(在父类中管理的Fruit列表)中获取对应的Fruit实例
Fruit fruit = getItem(position);
// 使用LayoutInflater从当前上下文(通过调用getContext获取)中加载指定资源ID(resourceId)的布局文件,
// 并将其转换为View对象,同时指定了父视图parent以及设置attachToRoot为false,
// 这意味着布局文件不会立即附加到父视图上,而是稍后根据需要进行添加等操作
View view = LayoutInflater.from(getContext()).inflate(resourceId, parent, false);
// 在刚创建好的视图view中查找ID为R.id.fruit_image的ImageView控件,用于后续设置图片显示
ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
// 在刚创建好的视图view中查找ID为R.id.fruit_name的TextView控件,用于后续设置文本显示
TextView fruitName = (TextView) view.findViewById(R.id.fruit_name);
// 设置ImageView显示的图片资源,通过调用fruit对象的getImageId方法获取对应的图片资源ID
fruitImage.setImageResource(fruit.getImageId());
// 设置TextView显示的文本内容,通过调用fruit对象的getName方法获取对应的水果名称文本
fruitName.setText(fruit.getName());
// 返回创建并配置好的视图view,这个视图将会作为列表中的一项进行展示
return view;
}
}
对main_activity进行修改,每个对象的图片可自己在网上查找后加入drawable文件夹,便可实现图片的显示
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.List;
// MainActivity类继承自AppCompatActivity,是Android应用中主要的Activity(界面)类,承载着界面相关的逻辑和操作
public class MainActivity extends AppCompatActivity {
// 定义一个List集合,用于存储Fruit类型的对象,也就是用来存放各种水果信息
private List<Fruit> fruitList = new ArrayList<>();
// 重写onCreate方法,该方法在Activity创建时被调用,用于进行初始化等相关操作
@Override
protected void onCreate(Bundle savedInstanceState) {
// 调用父类(AppCompatActivity)的onCreate方法,完成必要的系统初始化操作
super.onCreate(savedInstanceState);
// 设置当前Activity对应的布局文件,这里使用的是R.layout.activity_main布局资源,
// 它定义了Activity界面的整体外观和包含的各个视图组件等
setContentView(R.layout.activity_main);
// 调用initFruits方法,用于初始化水果数据,向fruitList中添加各种水果对象
initFruits();
// 创建FruitAdapter适配器对象,用于将fruitList中的水果数据适配到相应的视图上进行展示。
// 传入当前Activity的上下文(MainActivity.this)、水果列表项对应的布局资源(R.layout.fruit_item)以及水果数据列表(fruitList)
FruitAdapter adapter = new FruitAdapter(MainActivity.this, R.layout.fruit_item, fruitList);
// 通过findViewById方法,根据ID(R.id.list_view)查找布局文件中定义的ListView组件,
// 用于展示水果列表数据
ListView listView = (ListView) findViewById(R.id.list_view);
// 为ListView设置数据适配器,将之前创建好的adapter与ListView关联起来,这样ListView就能根据adapter中的数据进行展示了
listView.setAdapter(adapter);
// 为ListView设置点击事件监听器,当用户点击列表中的某一项时,会触发onItemClick方法中的逻辑
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
// 重写onItemClick方法,用于处理ListView列表项被点击时的操作
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 根据点击的位置(position)从fruitList中获取对应的Fruit对象,以便获取该水果的相关信息
Fruit fruit = fruitList.get(position);
// 使用Toast弹出一个短暂显示的提示信息,显示当前点击的水果的名称。
// 传入当前Activity的上下文(MainActivity.this)、要显示的水果名称(fruit.getName())以及显示时长(Toast.LENGTH_SHORT)
Toast.makeText(MainActivity.this, fruit.getName(), Toast.LENGTH_SHORT).show();
}
});
}
// 初始化水果数据的方法,向fruitList集合中添加多个Fruit对象,每个对象代表一种水果,包含名称和对应的图片资源ID
private void initFruits() {
for (int i = 0; i < 2; i++) { //该循环只是为了能将手机纵向填满
// 创建一个名为Apple的Fruit对象,传入水果名称"Apple"以及对应的苹果图片资源ID(R.drawable.apple_pic)
// 这里需要确保你的项目中存在对应的图片资源文件且资源ID正确定义了
Fruit apple = new Fruit("Apple", R.drawable.apple_pic);
fruitList.add(apple);
Fruit banana = new Fruit("Banana", R.drawable.banana_pic);
fruitList.add(banana);
Fruit orange = new Fruit("Orange", R.drawable.orange_pic);
fruitList.add(orange);
Fruit watermelon = new Fruit("Watermelon", R.drawable.watermelon_pic);
fruitList.add(watermelon);
Fruit pear = new Fruit("Pear", R.drawable.pear_pic);
fruitList.add(pear);
Fruit grape = new Fruit("Grape", R.drawable.grape_pic);
fruitList.add(grape);
Fruit pineapple = new Fruit("Pineapple", R.drawable.pineapple_pic);
fruitList.add(pineapple);
Fruit strawberry = new Fruit("Strawberry", R.drawable.strawberry_pic);
fruitList.add(strawberry);
Fruit cherry = new Fruit("Cherry", R.drawable.cherry_pic);
fruitList.add(cherry);
Fruit mango = new Fruit("Mango", R.drawable.mango_pic);
fruitList.add(mango);
}
}
}
完成以上操作后即可实现列表展示各种水果,点击对应的水果后会在下方显示对应的名称。
马千里
https://blog.csdn.net/2301_76688135/article/details/144540841?spm=1001.2014.3001.5501