Android list view简单用法与进阶用法

一、最简单的list

Android list view简单用法与进阶用法_第1张图片

1.在activity_main中加入 listview布局

这里给listview指定id为lv_demo1,代码如下:



2.修改MainActivity中的代码

listview是用来展示大量数据的,数据可以来自网络,也可以来自数据库,本次例子中使用数组来提供数据源。

public class MainActivity extends AppCompatActivity {

private String[] data ={"东北虎","野猪","野牛","狗熊","狐狸","猴子"};

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

    ArrayAdapter adapter = new ArrayAdapter(
            MainActivity.this,android.R.layout.simple_list_item_1,data);
    ListView listView = (ListView) findViewById(R.id.lv_demo1);
    listView.setAdapter(adapter);
}
}

首先添加一个需要被显示的数组。但是数组中的数据无法直接传递给listview,所以我们要定义适配器,本文使用的适配器为 ArrayAdapter,通过泛型来指定要适配的类型,因为本文提供的数据为string类型,所以我们指定它为string,然后在构造函数中依次传入 上下文,listview子项布局的id,和要显示的数据。android.R.layout.simple_list_item_1为安卓内置的布局文件,可以简单显示文本。
最后,listview需要设置setadapter方法,让list与数据建立链接,这样我们简单的list就完成了!

二、自定义ListView

Android list view简单用法与进阶用法_第2张图片

1.定义实体类
public class Animal {
private String Name;
private String foot;
private int image;

public String getName() {
    return Name;
}

public void setName(String name) {
    Name = name;
}

public String getFoot() {
    return foot;
}

public void setFoot(String foot) {
    this.foot = foot;
}

public int getImage() {
    return image;
}

public void setImage(int image) {
    this.image = image;
}

public Animal(String name, String foot, int image) {
    Name = name;
    this.foot = foot;
    this.image = image;
}
}

定义一个animal实体类,新建Animal.此类中有三个字段,name、foot、image分别赛表动物的名字、脚的数量和对应的图片资源。

2.为ListView指定我们的自定义布局

在layout下创建布局animal_item








    
    


3.创建适配器

接下来定义适配器AnimalAdapter

package com.example.listadapterdemo;

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;

public class AnimalAdapter extends ArrayAdapter {
private int resourceId;

public AnimalAdapter(Context context, int resource, List objects) {
    super(context, resource, objects);
    resourceId = resource;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
    Animal animal = getItem(position);
    View view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
    ImageView animalImage = (ImageView)view.findViewById(R.id.animal_image);
    TextView animalName = (TextView) view.findViewById(R.id.animal_name);
    TextView animalFoot = (TextView) view.findViewById(R.id.animal_foot);
    animalImage.setImageResource(animal.getImage());
    animalName.setText(animal.getName());
    animalFoot.setText(animal.getFoot());
    return view;
}
}

适配器充血了父类的构造函数,将上下文、listview子项布局的id和数据都传递进来。另外有充血了getView()方法,首先通过getitem()方法得到当前Animal实例,然后使用layoutinflater来为这个子项加载我们传入的布局。

5.修改MainActivity中的代码
package com.example.listadapterdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

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

public class MainActivity extends AppCompatActivity {

private List animalList = new ArrayList<>();

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

    initAnimals();
    AnimalAdapter adapter = new AnimalAdapter(MainActivity.this,
            R.layout.animal_item,animalList);
    ListView listView = (ListView) findViewById(R.id.lv_demo2);
    listView.setAdapter(adapter);




}

private void initAnimals() {
    for (int i = 0; i< 1 ;i++){
        Animal houzi = new Animal("猴子","两只脚",R.drawable.houzi);
        animalList.add(houzi);
        Animal laohu = new Animal("老虎","四只脚",R.drawable.laohu);
        animalList.add(laohu);
        Animal shizi = new Animal("狮子","四只脚",R.drawable.shizi);
        animalList.add(shizi);
        Animal xiaoniao = new Animal("小鸟","两只脚",R.drawable.xiaoniao);
        animalList.add(xiaoniao);
        Animal yazi = new Animal("鸭子","两只脚",R.drawable.yazi);
        animalList.add(yazi);
        Animal yezhu = new Animal("野猪","四只脚",R.drawable.yezhu);
        animalList.add(yezhu);
    }
}
}

我们添加一个 initAnimals()方法用于初始化我们的动物数据。在onCreate()创建了FruitAdapterr对象,并且将FruitAdapter作为适配器传给ListView。这样我们的程序就完成了!

git代码地址:https://github.com/370937607/ListAdapterDemo.

你可能感兴趣的:(安卓)