重写SimpleAdapter实现自定义ListView

 <转载请注明文件出处:>  

要想实现自定义ListView,首先需要自定义一个listView的单元布局。下面是一个布局实例:

 

<?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:layout_width="wrap_content"
        android:layout_height="32dp"
        android:id="@+id/imageView"/>
  
      <TextView
        android:layout_width="120dp"
        android:layout_height="35dp"
        android:textSize="22sp" 
        android:text="2008-12-12"
        android:gravity="center" 
        android:paddingRight="5dp"
        android:id="@+id/dateView"
        />
      <LinearLayout 
          android:layout_width="wrap_content"
          android:layout_height="fill_parent"
          android:orientation="vertical">
          <LinearLayout 
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:orientation="horizontal">
        <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="12sp" 
        android:text="类型:" />
          <TextView
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:textSize="10sp" 
        android:id="@+id/typeView" />
          </LinearLayout>
          <LinearLayout 
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:orientation="horizontal">
           <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="12sp" 
        android:text="金额:" />
          <TextView
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:textSize="10sp" 
        android:id="@+id/moneyView" />
          </LinearLayout>
         </LinearLayout>
  

</LinearLayout>

利用该布局实现的效果如下


     

我们需要通过一个自定义的Adapter(通常,这个Adapter继承自BaseAdapter)和 List<Map<K,V>>来设置ListView数据。

自定义的Adapter关键代码

public View getView(int position, View convertView, ViewGroup parent) {
inflater = LayoutInflater.from(this.context);
convertView = inflater.inflate(R.layout.list_items, null);
ListView listView = null;
if (listView == null) {
              Log.v("position",Integer.toString(position));
listView = new ListView();
            
//控件实例化
listView.dateView = (TextView) convertView
.findViewById(R.id.dateView);
listView.typeView = (TextView) convertView
.findViewById(R.id.typeView);
listView.moneyView = (TextView) convertView
.findViewById(R.id.moneyView);
              //设置控件数据,数据源来自List<Map<K,V>>
listView.dateView.setText((String) dataList.get(position).get(
DBtest.DATA_NAME));
listView.typeView.setText((String) dataList.get(position).get(
DBtest.TYPE_NAME));
listView.moneyView.setText((String) dataList.get(position).get(
DBtest.MONEY_NAME));
Log.v("money",listView.moneyView.getText().toString());
} else {
listView = (ListView) convertView.getTag();
}
       
convertView.setTag(listView);
        //convertView用于在ListView中显示
return convertView;
}
数据源部分
  
Cursor cursor = cursor = DateBaseTestActivity.mDatabase.rawQuery(
"SELECT *FROM " + DBtest.TABLE_NAME, null);
Log.v("cursor", Integer.toString(cursor.getCount()));
cursor.moveToFirst();
do {
Map<String, Object> map = new HashMap<String, Object>();
int data_id = cursor.getColumnIndex(DBtest.DATA_NAME);
int type_id = cursor.getColumnIndex(DBtest.TYPE_NAME);
int money_id = cursor.getColumnIndex(DBtest.MONEY_NAME);
String dataString = cursor.getString(data_id);
String typeString = cursor.getString(type_id);
String moneyString = cursor.getString(money_id);
Log.v("isEMpry",moneyString );
map.put(DBtest.DATA_NAME, dataString);
map.put(DBtest.TYPE_NAME, typeString);
map.put(DBtest.MONEY_NAME, moneyString);
Log.v("map",(String)map.get(DBtest.MONEY_NAME));
list.add(map);
} while (cursor.moveToNext());
将数据库中的数据读取到List中。
public ListViewAdapter getAdapter(List<Map<String, Object>> dataList) {
Log.v("test", "ok");
ListViewAdapter mAdapter = new ListViewAdapter(this, dataList);
Log.v("test", Integer.toString(mAdapter.getCount()));
return mAdapter;
}


 方法getAdapter利用我们获得的这个list初始化一个ListViewAdapter(这是我自定义的adapter)

 备注1:使用Cursor时,需要注意越界检查。 使用完后,请关闭。

 备注2ListView的长度由List<Map<K,V>>的长度决定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值