ListView 使用 BaseAdater 适配器

  • SimpleAdapter 继承 BaseAdapter ,SimpleAdapter 看做 android 帮我们实现的适配器。
  • ViewHolder 是为了提高加载效率,为了避免每次调用 getView() 方法是都通过 findViewById 去是 实例化 控件

效果:
在这里插入图片描述

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/LV"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

item_layout.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="horizontal">

    <ImageView
        android:id="@+id/img"
        android:layout_marginLeft="20dp"
        android:src="@mipmap/ic_launcher_round"
        android:layout_width="50dp"
        android:layout_height="50dp" />

    <TextView
        android:id="@+id/tv"
        android:gravity="center"
        android:text="你好"
        android:textSize="28sp"
        android:layout_width="wrap_content"
        android:layout_height="50dp" />
</LinearLayout>

Animal 数据绑定类

public class Animal {
    public Animal(String animal, int imgId) {
        this.animal = animal;
        this.imgId = imgId;
    }

    private String animal;
    private int imgId;

    public int getImgId() {
        return imgId;
    }

    public void setImgId(int imgId) {
        this.imgId = imgId;
    }

    public String getAnimal() {
        return animal;
    }

    public void setAnimal(String animal) {
        this.animal = animal;
    }
}

AnimalAdapter

public class AnimalAdapter extends BaseAdapter {
    private Context context;
    private List<Animal> datas;

    public AnimalAdapter(Context context,List<Animal> datas)
    {
        this.context = context;
        this.datas = datas;
    }


    // 子项个数
    @Override
    public int getCount() {
        return datas.size();
    }
    // 返回子项对象
    @Override
    public Object getItem(int position) {
        return datas.get(position);
    }

    // 返回子项下标
    @Override
    public long getItemId(int position) {
        return position;
    }

    // 创建 ViewHolder 类
    class ViewHolder {
        ImageView animalImage;
        TextView animalName;
    }
    // 返回子项视图
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Animal animal = (Animal) getItem(position);
        View view;
        ViewHolder viewHolder;
        if(convertView == null)
        {
            view = LayoutInflater.from(context).inflate(R.layout.item_layout,null);
            viewHolder = new ViewHolder();
            viewHolder.animalImage = view.findViewById(R.id.img);
            viewHolder.animalName = view.findViewById(R.id.tv);
            view.setTag(viewHolder);
        }else{
            view = convertView;
            viewHolder = (ViewHolder) view.getTag();
        }
        viewHolder.animalName.setText(animal.getAnimal());
        viewHolder.animalImage.setImageResource(animal.getImgId());
        return view;
    }
}

MainActivity.java

public class MainActivity extends AppCompatActivity{


    private ListView listView;
    private List<Animal> datas = new ArrayList<>();
    private AnimalAdapter animalAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initialData();
        listView = findViewById(R.id.LV);
        animalAdapter = new AnimalAdapter(this,datas);
        listView.setAdapter(animalAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this, datas.get(position).getAnimal(), Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void initialData() {
        for (int i = 0; i < 20; i++) {
            datas.add(new Animal("安卓"+i,R.drawable.ic_launcher_round));
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38340601/article/details/83152449
今日推荐