android 重写adpter

/**
 * 章节列表,自定义Adapter
 * @author Administrator
 *
 */
public class ChapterListAdapter extends BaseAdapter {
 private Context context;
 private List<Chapter> list;
 private LayoutInflater layoutInflater;
 private SQLiteDatabase sqLiteDatabase;

 public ChapterListAdapter(Context context, List<Chapter> list,
   SQLiteDatabase sqLiteDatabase) {
  super();
  this.context = context;
  this.list = list;
  this.layoutInflater = LayoutInflater.from(context);
  this.sqLiteDatabase = sqLiteDatabase;
 }

 public int getCount() {
  return list.size();
 }

 public Object getItem(int position) {
  // TODO Auto-generated method stub
  return null;
 }

 public long getItemId(int position) {
  // TODO Auto-generated method stub
  return 0;
 }

 public View getView(int position, View convertView, ViewGroup parent) {
  final int selIndex = position;
  ListItemView listItemView = null;

  listItemView = new ListItemView();//实例化对象

  convertView = layoutInflater.inflate(R.layout.chapterslistitem, null);//获取布局文件 //不要忘记布局文件

  listItemView.chapter_name = (TextView) convertView
    .findViewById(R.id.chapter_name);
  listItemView.chapter_listendate = (TextView) convertView
    .findViewById(R.id.chapter_listendate);
  listItemView.chapter_btnplaynow = (ImageView) convertView
    .findViewById(R.id.chapter_btnplaynow);

  convertView.setTag(listItemView);//赋值

  listItemView.chapter_name.setText(list.get(position).getName());
  // 查询此章节是否收听过
  Cursor cursor = sqLiteDatabase.rawQuery(
    "select * from chapterlog where bookid="
      + list.get(position).getBookId() + " and chapterid="
      + list.get(position).getId() + "", null);
  String lastTime = "";
  while (cursor.moveToNext()) {
   lastTime = cursor.getString(cursor.getColumnIndex("datetime"));
  }
  cursor.close();
  //逻辑判断,如果收听过此章节,显示播放按钮,否则显示收听时间
  if (lastTime.equals("")) {
   listItemView.chapter_btnplaynow
     .setImageResource(R.drawable.playnow);
   listItemView.chapter_btnplaynow.setVisibility(ImageView.VISIBLE);
   listItemView.chapter_btnplaynow
     .setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
       Intent intent = new Intent();
       Chapter selChapter = (Chapter) list.get(selIndex);
       intent.setClass(context, MediaPlayerActivity.class);
       intent.putExtra("chapter", selChapter);
       context.startActivity(intent);
       MediaPlayerActivity.currentIndex = selIndex;// 更新索引值
      }
     });
  } else {
   listItemView.chapter_listendate.setText(lastTime);
   listItemView.chapter_listendate.setVisibility(TextView.VISIBLE);
  }

  return convertView;
 }

 /**
  * 布局控件类
  * @author Administrator
  *
  */
 final class ListItemView {
  public TextView chapter_name;
  public TextView chapter_listendate;
  public ImageView chapter_btnplaynow;
 }

}

Android 中,我们通常使用 Adapter 来实现 ListView、GridView 等控件的数据绑定。重写 Adapter 的目的是为了实现自定义的数据绑定逻辑。 重写 Adapter 需要继承 BaseAdapter,然后实现以下方法: 1. getCount():获取数据源的总数。 2. getItem():获取指定位置的数据项。 3. getItemId():获取指定位置的数据项的 ID。 4. getView():获取指定位置的数据项的视图。 在实现 getView() 方法时,我们需要使用 LayoutInflater 来加载自定义的布局文件,并将数据绑定到布局中的控件上。例如: ``` @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.my_list_item, null); holder = new ViewHolder(); holder.title = (TextView) convertView.findViewById(R.id.title); holder.content = (TextView) convertView.findViewById(R.id.content); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } MyData data = dataList.get(position); holder.title.setText(data.getTitle()); holder.content.setText(data.getContent()); return convertView; } static class ViewHolder { TextView title; TextView content; } ``` 在上面的代码中,我们使用了 ViewHolder 模式来提高 ListView 的性能。同时,在 getView() 方法中,我们将 MyData 类型的数据绑定到了自定义的布局文件 my_list_item.xml 中的控件上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值