gpt4 book ai didi

android - 日期为 SectionHeader 的自定义 ListView(使用自定义 SimpleCursorAdapter)

转载 作者:IT老高 更新时间:2023-10-28 22:13:11 27 4
gpt4 key购买 nike

我想以 Date 为 SectionHeader 显示 ListView。

我有什么: 我正在使用自定义 SimpleCursorAdapter 从 sqlite 数据库中显示 ListView。

我的自定义 SimpleCursorAdapter 是:

public class DomainAdapter extends SimpleCursorAdapter{
private Cursor dataCursor;

private LayoutInflater mInflater;

public DomainAdapter(Context context, int layout, Cursor dataCursor, String[] from,
int[] to) {
super(context, layout, dataCursor, from, to);
this.dataCursor = dataCursor;
mInflater = LayoutInflater.from(context);
}


public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder;

if (convertView == null) {
convertView = mInflater.inflate(R.layout.todo_row, null);

holder = new ViewHolder();
holder.text1 = (TextView) convertView.findViewById(R.id.label);//Task Title
holder.text2 = (TextView) convertView.findViewById(R.id.label2);//Task Date
holder.img = (ImageView) convertView.findViewById(R.id.task_icon);

convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

dataCursor.moveToPosition(position);
int title = dataCursor.getColumnIndex("title");
String task_title = dataCursor.getString(title);

int title_date = dataCursor.getColumnIndex("day");
String task_day = dataCursor.getString(title_date);

int description_index = dataCursor.getColumnIndex("priority");
int priority = dataCursor.getInt(description_index);

holder.text1.setText(task_title);
holder.text2.setText(task_day);

if(priority==1) holder.img.setImageResource(R.drawable.redbutton);
else if(priority==2) holder.img.setImageResource(R.drawable.bluebutton);
else if(priority==3)holder.img.setImageResource(R.drawable.greenbutton);
else holder.img.setImageResource(R.drawable.redbuttonchecked);

return convertView;
}

static class ViewHolder {
TextView text1;
TextView text2;
ImageView img;
}
}

到目前为止的 Google 搜索结果:

MergeAdapter

Jeff Sharkey

Amazing ListView

SO Question

问题:我想显示带有日期的 ListView 作为节标题。当然日期值来自 sqlite 数据库。

谁能指导我如何完成这项任务。

或者向我提供一个示例代码或与之相关的确切(类似)代码。

已编辑根据 Graham Borld 的回答(这工作正常。但它是一个快速修复。)

public class DomainAdapter extends SimpleCursorAdapter{
private Cursor dataCursor;
private LayoutInflater mInflater;

public DomainAdapter(Context context, int layout, Cursor dataCursor, String[] from,
int[] to) {
super(context, layout, dataCursor, from, to);
this.dataCursor = dataCursor;
mInflater = LayoutInflater.from(context);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder;

if (convertView == null)
{
convertView = mInflater.inflate(R.layout.tasks_row, null);
holder = new ViewHolder();
holder.text1 = (TextView) convertView.findViewById(R.id.label);//Task Title
holder.text2 = (TextView) convertView.findViewById(R.id.label2);//Task Date
holder.img = (ImageView) convertView.findViewById(R.id.taskImage);

holder.sec_hr=(TextView) convertView.findViewById(R.id.sec_header);

convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}

dataCursor.moveToPosition(position);
int title = dataCursor.getColumnIndex("title");
String task_title = dataCursor.getString(title);

int title_date = dataCursor.getColumnIndex("due_date");
String task_day = dataCursor.getString(title_date);

int description_index = dataCursor.getColumnIndex("priority");
int priority = dataCursor.getInt(description_index);

String prevDate = null;

if (dataCursor.getPosition() > 0 && dataCursor.moveToPrevious()) {
prevDate = dataCursor.getString(title_date);
dataCursor.moveToNext();
}


if(task_day.equals(prevDate))
{
holder.sec_hr.setVisibility(View.GONE);
}
else
{
holder.sec_hr.setText(task_day);
holder.sec_hr.setVisibility(View.VISIBLE);
}

holder.text1.setText(task_title);
holder.text2.setText(task_day);

if(priority==1) holder.img.setImageResource(R.drawable.redbutton);
else if(priority==2) holder.img.setImageResource(R.drawable.bluebutton);
else if(priority==3)holder.img.setImageResource(R.drawable.greenbutton);
else holder.img.setImageResource(R.drawable.redbuttonchecked);

return convertView;
}

static class ViewHolder {
TextView text1;
TextView text2;
TextView sec_hr;
ImageView img;
}
}

已编辑根据 CommonsWare 的回答

public class DomainAdapter extends SimpleCursorAdapter{
private Cursor dataCursor;
private TodoDbAdapter adapter;

private LayoutInflater mInflater;
boolean header;
String last_day;
public DomainAdapter(Context context, int layout, Cursor dataCursor, String[] from,
int[] to) {
super(context, layout, dataCursor, from, to);
this.dataCursor = dataCursor;
mInflater = LayoutInflater.from(context);
header=true;
adapter=new TodoDbAdapter(context);
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;
TitleHolder title_holder = null;

if(getItemViewType(position)==1)
{
//convertView= mInflater.inflate(R.layout.todo_row, parent, false);

if (convertView == null)
{
convertView = mInflater.inflate(R.layout.todo_row, null);

holder = new ViewHolder();
holder.text1 = (TextView) convertView.findViewById(R.id.label);//Task Title
holder.text2 = (TextView) convertView.findViewById(R.id.label2);//Task Date
holder.img = (ImageView) convertView.findViewById(R.id.task_icon);

convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}

dataCursor.moveToPosition(position);
int title = dataCursor.getColumnIndex("title");
String task_title = dataCursor.getString(title);

int title_date = dataCursor.getColumnIndex("day");
String task_day = dataCursor.getString(title_date);

int description_index = dataCursor.getColumnIndex("priority");
int priority = dataCursor.getInt(description_index);

holder.text1.setText(task_title);
holder.text2.setText(task_day);

if(priority==1) holder.img.setImageResource(R.drawable.redbutton);
else if(priority==2) holder.img.setImageResource(R.drawable.bluebutton);
else if(priority==3)holder.img.setImageResource(R.drawable.greenbutton);
else holder.img.setImageResource(R.drawable.redbuttonchecked);
}
else
{

if (convertView == null)
{
convertView = mInflater.inflate(R.layout.section_header, null);

title_holder = new TitleHolder();
title_holder.datee = (TextView) convertView.findViewById(R.id.sec_header);//Task Title

convertView.setTag(title_holder);
}
else
{
title_holder = (TitleHolder) convertView.getTag();
}

dataCursor.moveToPosition(position);

int title_date = dataCursor.getColumnIndex("day");
String task_day = dataCursor.getString(title_date);

title_holder.datee.setText(task_day);
}

return convertView;
}

static class ViewHolder {
TextView text1;
TextView text2;
ImageView img;
}

static class TitleHolder{
TextView datee;
}


@Override
public int getCount() {
return dataCursor.getCount()+1; //just for testing i took no. of headers=1
}


@Override
public int getViewTypeCount() {
return 2;
}

@Override
public int getItemViewType(int position) {

dataCursor.moveToPosition(position);
**Long id=dataCursor.getLong(position);**
Cursor date=adapter.fetchTodo(id);
int title_date = date.getColumnIndex("day");
String task_day = date.getString(title_date);
Log.i("tag",task_day);

if(last_day.equals(task_day))
return 1;//Display Actual Row
else
{
last_day=task_day;//Displaying Header
return 0;
}

}

/*
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {

final View view;

if(getItemViewType(cursor.getPosition())==1)
view= mInflater.inflate(R.layout.todo_row, parent, false);
else
view=mInflater.inflate(R.layout.section_header,parent, false);

return view;

}

@Override
public void bindView(View convertView, Context context, Cursor cursor) {
long id = cursor.getPosition();

}*/
}

我在以下行收到 Null Pointer Exception:Cursor date=adapter.fetchTodo(id);似乎 Cursor 没有获取任何数据。

最佳答案

到目前为止,最简单的方法是在每个项目中嵌入日期标题 View 。然后,您需要在 bindView 中做的就是将上一行的日期与这一行的日期进行比较,如果相同则隐藏日期。像这样的:

    String thisDate = cursor.getString(dateIndex);
String prevDate = null;

// get previous item's date, for comparison
if (cursor.getPosition() > 0 && cursor.moveToPrevious()) {
prevDate = cursor.getString(dateIndex);
cursor.moveToNext();
}

// enable section heading if it's the first one, or
// different from the previous one
if (prevDate == null || !prevDate.equals(thisDate)) {
dateSectionHeaderView.setVisibility(View.VISIBLE);
} else {
dateSectionHeaderView.setVisibility(View.GONE);
}

关于android - 日期为 SectionHeader 的自定义 ListView(使用自定义 SimpleCursorAdapter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6261593/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com