打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Creating a custom CursorAdapter for ListView ...
userphoto

2010.12.23

关注

When populate data from database to a ListView, sometimes you want to do more than just map database column values to list row. At this situation, SimpleCursorAdapter is not suitable . Your need to create a custom CursorAdapter. The steps are simple:

  1. Subclass CursorAdapter
  2. Override bindView and newView

Code

row.xml
<script src="//gist.github.com/241994.js?file=gistfile1.xsl"></script>
<?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">
<ImageView
android:src="@drawable/nba"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1"
android:layout_gravity="center_vertical">
<TextView
android:id="@+id/tv_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="dayofyear"
android:gravity="center_horizontal"
android:textSize="14.0dip" />
<TextView
android:id="@+id/tv_week"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:textSize="14.0dip" />
</LinearLayout>
<TextView
android:id="@+id/tv_time"
android:layout_width="50.0sp"
android:layout_height="wrap_content"
android:text="3"
android:gravity="right"
android:layout_gravity="center_vertical"
android:textSize="18.0dip"
android:layout_weight="1"/>
<TextView
android:id="@+id/tv_vs"
android:layout_width="140.0sp"
android:layout_height="wrap_content"
android:text="4" android:gravity="right"
android:layout_gravity="center_vertical"
android:textSize="18.0dip"
android:layout_weight="1"/>
</LinearLayout>
 
RowAdapter.java
<script src="//gist.github.com/241993.js?file=gistfile1.java"></script>
class RowAdapter extends CursorAdapter {
 
private final LayoutInflater mInflater;
 
public RowAdapter(Context context, Cursor c, boolean autoRequery) {
super(context, c, autoRequery);
mInflater = LayoutInflater.from(context);
}
 
public RowAdapter(Context context, Cursor c) {
super(context, c);
mInflater = LayoutInflater.from(context);
}
 
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView tvDate = (TextView) view.findViewById(R.id.tv_date);
TextView tvTime = (TextView) view.findViewById(R.id.tv_time);
TextView tvWeek = (TextView) view.findViewById(R.id.tv_week);
TextView tvVs = (TextView) view.findViewById(R.id.tv_vs);
 
StringBuilder date = new StringBuilder(cursor.getString(cursor
.getColumnIndex(DatabaseHelper.C_DATE)));
StringBuilder time = new StringBuilder(cursor.getString(cursor
.getColumnIndex(DatabaseHelper.C_TIME)));
String week = cursor.getString(cursor
.getColumnIndex(DatabaseHelper.C_WEEK));
String vs = cursor
.getString(cursor.getColumnIndex(DatabaseHelper.C_VS));
 
if (DateFormat.format("yyyyMMdd", System.currentTimeMillis())
.toString().equals(date.toString())) {
view.setBackgroundColor(Color.BLUE);
}
 
tvDate.setText(date.insert(4, '-').insert(7, '-'));
tvTime.setText(time.insert(time.length() - 2, ':'));
tvWeek.setText(week);
tvVs.setText(vs);
}
 
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final View view = mInflater.inflate(R.layout.list_item, parent, false);
return view;
}
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Cursor与Adapter结合使用
Android 设置页面UI设计
Android 线性布局详解
AndroidUI设计之 布局管理器
Android:XML布局文件详解
Android 设置主题实现点击波纹效果
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服