1.定义一个实体类,作为listview适配器的适配类型
public class Fruit
{
private String fruitName;
private int imageId;
public Fruit(String fruitName, int imageId)
{
this.fruitName = fruitName;
this.imageId = imageId;
}
public String getFruitName()
{
return fruitName;
}
public void setFruitName(String fruitName)
{
this.fruitName = fruitName;
}
public int getImageId()
{
return imageId;
}
public void setImageId(int imageId)
{
this.imageId = imageId;
}
}
2.listview的子项指定一个自定义的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
3.定义listview的adpaper
用convertView 优化性能:使用convertView缓存加载好的布局
用ViewHolder 优化不用每次都去findViewById 创建实例
public class FruitAdapter extends ArrayAdapter
{
private int resourceId;
public FruitAdapter(Context context, int resource, List<Fruit> objects)
{
super(context, resource, objects);
resourceId = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
Fruit fruit = (Fruit) getItem(position);
View view;
ViewHolder viewHolder;
if (convertView == null) {
view = LayoutInflater.from(getContext()).inflate(resourceId, parent, false);
viewHolder = new ViewHolder();
viewHolder.imageView = view.findViewById(R.id.image);
viewHolder.textView = view.findViewById(R.id.name);
view.setTag(viewHolder); //将ViewHolder 存在view中
}
else {
view = convertView;
viewHolder = (ViewHolder) view.getTag(); //重新取出ViewHolder
}
viewHolder.imageView.setImageResource(fruit.getImageId());
viewHolder.textView.setText(fruit.getFruitName());
return view;
}
public class ViewHolder
{
ImageView imageView;
TextView textView;
}
}
4.listview加载数据
public class MainActivity extends AppCompatActivity
{
private List<Fruit> fruitList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState)
{
// 加载数据
FruitAdapter adapter = new FruitAdapter(this,R.layout.layout_fruit,fruitList);
ListView listView = findViewById(R.id.listView);
listView.setAdapter(adapter);
// 点击事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
Fruit fruit = fruitList.get(position);
}
});
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_main);
}
}