【Android Studio】ListView的使用

Java

Fruit.java

复制代码
package com.example.myapplication;

public class Fruit {
    private int imageId;
    private String name;
    public Fruit(String name, int imageId){
        this.imageId=imageId;
        this.name=name;
    }
    public int getImageId() {
        return imageId;
    }

    public String getName() {
        return name;
    }
}
复制代码

FruitAdapter.java

复制代码
package com.example.myapplication;

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 androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import java.util.List;

public class FruitAdapter extends ArrayAdapter<Fruit> {

    private int resourceId;

    public FruitAdapter(Context context, int textViewResourceId, List<Fruit> objects){
        super(context,textViewResourceId,objects);
        resourceId=textViewResourceId;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        //每次滑动屏幕时,就会调用这个方法,创建新的实例并布置好布局返回
        //convertView会缓存之前的布局

        Fruit fruit=getItem(position);//获取当前项的fruit实例
        View view;
        ViewHolder viewHolder;//创建存储对象
        //如果之前没有缓存过布局,就进行加载
        if(convertView==null){
            view=LayoutInflater.from(getContext()).inflate(resourceId,parent,false);//给当前实例加载传入的布局

            viewHolder=new ViewHolder();//之前没有创建过,现在就创建一个存储对象
            viewHolder.fruitImage=view.findViewById(R.id.fruit_image);//获取到ImageView实例
            viewHolder.fruitName=view.findViewById(R.id.fruit_name);//获取到TextView实例
            view.setTag(viewHolder);//将viewHolder存储到view中,为了下次使用
        }else{
            view=convertView;
            viewHolder= (ViewHolder) view.getTag();
        }

        viewHolder.fruitImage.setImageResource(fruit.getImageId());//将当前实例的内容装入到实例当中
        viewHolder.fruitName.setText(fruit.getName());//同上

        return view;//将设定好的view布局传回去
    }
    class ViewHolder{
        ImageView fruitImage;
        TextView fruitName;
    }
}
复制代码

MainActivity.java

复制代码
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private String[] data={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r"};
    private List<Fruit> fruitList=new ArrayList<Fruit>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        init();//初始化数据
        FruitAdapter fruitAdapter=new FruitAdapter(MainActivity.this,R.layout.fruit_item,fruitList);//创建适配器

        ListView listView=findViewById(R.id.list_view);//获取ListView
        listView.setAdapter(fruitAdapter);//加载适配器
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Fruit fruit=fruitList.get(position);//从列表中取得点击的实例,通过position
                Toast.makeText(MainActivity.this,fruit.getName(),Toast.LENGTH_SHORT).show();
            }
        });
    }
    private void init(){
        //建立Fruit实例并装入fruitList中
        for(int i=0;i<2;i++){
            Fruit a=new Fruit(data[0], R.mipmap.ic_launcher);
            fruitList.add(a);
            Fruit b=new Fruit(data[1], R.mipmap.ic_launcher);
            fruitList.add(b);
            Fruit c=new Fruit(data[2], R.mipmap.ic_launcher);
            fruitList.add(c);
            Fruit d=new Fruit(data[3], R.mipmap.ic_launcher);
            fruitList.add(d);
            Fruit e=new Fruit(data[4], R.mipmap.ic_launcher);
            fruitList.add(e);
            Fruit f=new Fruit(data[5], R.mipmap.ic_launcher);
            fruitList.add(f);
            Fruit g=new Fruit(data[6], R.mipmap.ic_launcher);
            fruitList.add(g);
            Fruit h=new Fruit(data[7], R.mipmap.ic_launcher);
            fruitList.add(h);
            Fruit l=new Fruit(data[8], R.mipmap.ic_launcher);
            fruitList.add(l);
            Fruit j=new Fruit(data[9], R.mipmap.ic_launcher);
            fruitList.add(j);
        }
    }
}
复制代码

layout

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"
        android:layout_margin="5dp" />
</LinearLayout>
复制代码

fruit_item.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">

    <ImageView
        android:id="@+id/fruit_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp" />

    <TextView
        android:id="@+id/fruit_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:gravity="center_vertical" />

</LinearLayout>
复制代码

 

posted @   RikkaXl  阅读(724)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示