1、item布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/txtFruitImage"
android:layout_width="100dp"
android:layout_height="100dp" />
<TextView
android:id="@+id/txtFruitName"
android:text="Name"
android:layout_gravity="center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
2.新建一个数据适配器继承与BaseAdapter
public class FruitAdapter2 extends BaseAdapter {
private List<Fruit> fruits;
private Context context;
public FruitAdapter2(Context context,List<Fruit> fruits) {
this.fruits = fruits;
this.context = context;
}
@Override
public int getCount() {
return fruits.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Fruit fruit = fruits.get(position);
View view;
if (convertView == null) {//如何发现position位置没有可用的view则重新生成一个
view = LayoutInflater.from(context).inflate(R.layout.item_fruit, parent, false);
TextView textView = view.findViewById(R.id.txtFruitName);
ImageView imageView = view.findViewById(R.id.txtFruitImage);
textView.setText(fruit.getName());
imageView.setImageResource(fruit.getImageId());
ViewHolder viewHolder = new ViewHolder();
viewHolder.ImageFruit = imageView;
viewHolder.txtFruitName = textView;
view.setTag(viewHolder);
Log.e("muzi", "在" + position + "位置上生成一个view:"+view.hashCode());
} else {//进行数据绑定
view = convertView;
ViewHolder viewHolder = (ViewHolder)view.getTag();
viewHolder.ImageFruit.setImageResource(fruit.getImageId());
viewHolder.txtFruitName.setText(fruit.getName());
}
return view;
}
class ViewHolder{
TextView txtFruitName;
ImageView ImageFruit;
}
}
3、Activity部分
public class SecondActivity extends AppCompatActivity {
List<Fruit> fruits = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
ListView listView = findViewById(R.id.listView);
generateFruits();
listView.setAdapter(new FruitAdapter2(this,fruits));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(SecondActivity.this,fruits.get(position).getName(),Toast.LENGTH_SHORT).show();
}
});
}
private void generateFruits() {
fruits.add(new Fruit("apple", R.drawable.apple));
fruits.add(new Fruit("grape", R.drawable.grape));
fruits.add(new Fruit("strawberry", R.drawable.strawberry));
fruits.add(new Fruit("bannana", R.drawable.bannana));
fruits.add(new Fruit("apple", R.drawable.apple));
fruits.add(new Fruit("grape", R.drawable.grape));
fruits.add(new Fruit("strawberry", R.drawable.strawberry));
fruits.add(new Fruit("bannana", R.drawable.bannana));
fruits.add(new Fruit("apple", R.drawable.apple));
fruits.add(new Fruit("grape", R.drawable.grape));
fruits.add(new Fruit("strawberry", R.drawable.strawberry));
fruits.add(new Fruit("bannana", R.drawable.bannana));
}
}