MainActivity.java
public class MainActivity extends AppCompatActivity {
private List<Goods> mGoodsList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initGoodsList();
ListAdapter adapter = new ListAdapter(MainActivity.this, R.layout.list_item, mGoodsList);
ListView listView = (ListView) findViewById(R.id.list_view);
listView.setAdapter(adapter);
}
private void initGoodsList() {
for (int i = 0; i < 3; i++) {
Goods table = new Goods(R.drawable.table, "桌子", "100元");
Goods apple = new Goods(R.drawable.apple, "苹果", "10元/斤");
Goods cake = new Goods(R.drawable.cake, "蛋糕", "108元");
Goods sweater = new Goods(R.drawable.sweater, "线衣", "120元");
mGoodsList.add(table);
mGoodsList.add(apple);
mGoodsList.add(cake);
mGoodsList.add(sweater);
}
}
}
ListAdapter.java
public class ListAdapter extends ArrayAdapter<Goods> {
private int listLayoutId;
public ListAdapter(Context context, int listLayoutId, List<Goods> data) {
super(context, listLayoutId, data);
this.listLayoutId = listLayoutId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {//convertView用于缓存之前加载好的布局
Goods goods = getItem(position);
View view;
ViewHolder viewHolder;
if (convertView == null) {
view = LayoutInflater.from(getContext()).inflate(listLayoutId, parent, false);
viewHolder = new ViewHolder();
viewHolder.goodsImage = view.findViewById(R.id.image);
viewHolder.goodsName = view.findViewById(R.id.name);
viewHolder.goodsPrice = view.findViewById(R.id.price);
view.setTag(viewHolder); // 将ViewHolder存储在View中
} else {
view = convertView;
viewHolder = (ViewHolder) view.getTag(); // 重新获取ViewHolder
}
viewHolder.goodsImage.setImageResource(goods.getImgId());
viewHolder.goodsName.setText(goods.getName());
viewHolder.goodsPrice.setText(goods.getPrice());
return view;
}
/*定义一个ViewHolder,将convertView的tag设置为ViewHolder, 不为空时重用ViewHolder即可.
这样的话getView不用每次都重写定义View并载入布局,可以加快运行速度*/
class ViewHolder {
ImageView goodsImage;
TextView goodsName;
TextView goodsPrice;
}
}
Goods.java
public class Goods {
private Integer imgId;
private String name;
private String price;
public Goods(Integer imgId, String name, String price) {
this.imgId = imgId;
this.name = name;
this.price = price;
}
public Integer getImgId() {
return imgId;
}
public void setImgId(Integer imgId) {
this.imgId = imgId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
}
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
list_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<ImageView
android:id="@+id/image"
android:layout_width="80dp"
android:layout_height="80dp"/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"/>
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp" />
</LinearLayout>
</LinearLayout>