ListView界面以及点击事件

一、基本概念

  • 它主要用于以列表的形式展示数据。想象一下手机通讯录,其中一个个联系人信息以垂直排列的方式呈现,这就是 ListView 的典型应用场景。用户可以方便地浏览列表中的各项内容。

二、功能特点

  1. 数据展示多样性
    • 它能够展示各种类型的数据,如简单的文本列表(例如,待办事项列表,每个事项就是一个文本项)、包含图标和文本的组合项(像应用商店中的应用列表,有应用图标和应用名称)。
    • 可以展示来自不同数据源的数据,如从数据库中读取的用户信息、从网络请求获取的新闻列表等。
  2. 滚动功能
    • 当列表中的数据项较多,无法在一屏内全部显示时,ListView 提供了滚动功能。用户可以通过手指滑动(在触摸设备上)或者鼠标滚轮(在桌面设备上)来浏览列表中的其他项。
  3. 用户交互性
    • 支持多种用户交互方式。例如,用户可以点击列表中的某一项,触发相应的操作,如打开一个新的页面来查看该项的详细信息,或者在选中多项后进行批量删除等操作。

三、案例展示

显示水果列表,点击后下方提示水果名称以表示该行被点击

先对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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值