Android开发中,ListView可以说是除了Button以外最常打交道的控件了,它提供了一种简洁统一的方式来组织数据和显示。
下面是我用ListView显示我的购物车APP时的代码。
- 主界面Layout文件:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:background="#EDEDED">
<TextView
android:layout_width="0dp"
android:layout_height="fill_parent"
android:text="图片"
android:textSize="16sp"
android:textColor="#395B3C"
android:layout_gravity="center"
android:gravity="center"
android:layout_weight="2"/>
<TextView
android:layout_width="0dp"
android:layout_height="fill_parent"
android:text="名称"
android:textSize="16sp"
android:textColor="#395B3C"
android:layout_gravity="center"
android:gravity="center"
android:layout_weight="3"/>
<TextView
android:layout_width="0dp"
android:layout_height="fill_parent"
android:text="库存(件)"
android:textSize="16sp"
android:textColor="#395B3C"
android:layout_gravity="center"
android:gravity="center"
android:layout_weight="2"/>
<TextView
android:layout_width="0dp"
android:layout_height="fill_parent"
android:text="成本/标价"
android:textSize="16sp"
android:textColor="#395B3C"
android:layout_gravity="center"
android:gravity="center"
android:layout_weight="2"/>
</LinearLayout>
<View
android:layout_height="1dp"
android:layout_width="fill_parent"
android:background="#BDBDBD"/>
<ListView
android:id="@+id/lv_goodsshop"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:divider="@drawable/line">
</ListView>
- ListView中每一行的layout文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="5dp"
android:paddingBottom="5dp">
<ImageView
android:id="@+id/pic_iv"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_gravity="center"
android:gravity="center"
android:layout_weight="2"/>
<TextView
android:id="@+id/goodsName_tv"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:textSize="14sp"
android:textColor="#292929"
android:layout_gravity="center"
android:gravity="center"
android:layout_weight="3"
/>
<TextView
android:id="@+id/amount_tv"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:textSize="14sp"
android:textColor="#292929"
android:layout_gravity="center"
android:gravity="center"
android:layout_weight="2"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_gravity="center"
android:layout_weight="2">
<TextView
android:id="@+id/cost_tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="14sp"
android:textColor="#8B4513"
android:layout_weight="1"/>
<TextView
android:id="@+id/price_tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="14sp"
android:textColor="#395B3C"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
- 初始化ListView
// 初始化列表
private void InitListView() {
listview = (ListView) findViewById(R.id.lv_goodsshop);
adapter = new GoodsManagerAdapter(this);
adapter.setList(FusionField.goodsList);
listview.setAdapter(adapter); // 绑定数据
// 列表点击事件
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
currentID = position; // 这是line ID,即List中第几个
Intent intent = new Intent();
intent.setClass(GoodsManagerActivity.this, GoodsEditActivity.class);
intent.putExtra("ID", currentID);
startActivity(intent);
}
});
}
- 数据填充的Adapter
public class GoodsManagerAdapter extends BaseAdapter {
private class MyHolder {
ImageView pic;
TextView name;
TextView amount;
TextView cost;
TextView price;
}
private Context context;
private List<GoodsInfo> list;
private LayoutInflater mInflater;
public GoodsManagerAdapter(Context c) {
super();
this.context = c;
this.list = new ArrayList<GoodsInfo>();
}
public void setList(List<GoodsInfo> list) {
this.list=list;
mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return list.size();
}
@Override
public Object getItem(int index) {
return list.get(index);
}
@Override
public long getItemId(int index) {
return index;
}
@Override
public View getView(int index, View convertView, ViewGroup parent) {
MyHolder holder;
//注意:不重用 convertView, 否则滚动后会错乱
convertView = mInflater.inflate(R.layout.goodsmanager_row, null);
holder = new MyHolder();
holder.pic = (ImageView)convertView.findViewById(R.id.pic_iv);
holder.name = (TextView)convertView.findViewById(R.id.goodsName_tv);
holder.amount = (TextView)convertView.findViewById(R.id.amount_tv);
holder.cost = (TextView)convertView.findViewById(R.id.cost_tv);
holder.price = (TextView)convertView.findViewById(R.id.price_tv);
convertView.setTag(holder);
GoodsInfo info = list.get(index);
if (info != null) {
holder.pic.setImageBitmap(info.getPicture());
holder.name.setText(info.getName());
holder.amount.setText(String.valueOf(info.getAmount()));
holder.cost.setText("成本:" + String.valueOf(info.getCost()));
holder.price.setText("价格:" + String.valueOf(info.getPrice()));
if(info.getAmount()<5)
holder.amount.setTextColor(Color.RED);
}
return convertView;
}
}
掌握了这些基本的做法,你能实现更复杂有趣的设计。
- * Android开发进阶系列(一) 序言 *
- * Android开发进阶系列(二) Tab页界面布局 *
- * Android开发进阶系列(三) 系统参数的获取和Broadcast *
- * Android开发进阶系列(四) 左移拉出Menu菜单界面布局 *
- * Android开发进阶系列(五) 连接服务器更新APK或下载资源文件 *
- * Android开发进阶系列(六) ListView的基本用法 *
- * Android开发进阶系列(七) 使用数据库 *
- * Android开发进阶系列(八) 界面美化之自定义弹出框 *
- * Android开发进阶系列(九) AChartEngine专题 *