我正在制作一个待办事项列表应用程序,我创建了一个SQLite数据库并将其与我的应用程序相关联,除了数组中的数据外,一切似乎都很好,它们在创建新项目时相互克服,就像我设置第一个任务(研究)和第二个任务(研究)时,它创建两个不同的项目,每个项目都有名称(StudyResearch)...这里是我的代码与基础适配器,光标和inflater。
class MyCustomAdapter extends BaseAdapter
{
ArrayList<ListItem> Items=new ArrayList<ListItem>();
MyCustomAdapter(ArrayList<ListItem> Items ) {
this.Items=Items;
}
@Override
public int getCount() {
return (int) DatabaseUtils.queryNumEntries(db, "tasks");
}
@Override
public String getItem(int position) {
return Items.get(position).Name;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
String[] cols = {"id", "name", "time", "date"};
Cursor pointer = db.query("tasks", cols, null,null,null,null,null);
String name = "";
String time = "";
String date = "";
//String data = "";
while (pointer.moveToNext()){
name += pointer.getString(1);
time += pointer.getString(2);
date += pointer.getString(3);
//data += pointer.getInt(0) + " - " + pointer.getString(1) + " - " + pointer.getInt(2) +" - " + pointer.getInt(3);
}
LayoutInflater linflater =getLayoutInflater();
View view1=linflater.inflate(R.layout.row_view, null);
final CheckedTextView tvTasks =(CheckedTextView) view1.findViewById(R.id.tvTasks);
CheckedTextView tvDesc =(CheckedTextView) view1.findViewById(R.id.tvDesc);
tvTasks.setText(name);
tvDesc.setText(date + "(" + time + ")"); //date + "(" + time + ")"
tvTasks.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvTasks.toggle();
}
});
return view1;
}
答案 0 :(得分:0)
您遇到的问题是您正在遍历游标中的所有数据并结合+ =连接所检索的数据。 而你想要做的是位置到光标中的相应行,并从该行获取数据(不是我推荐这种方式,因为CursorAdapter更适合)< / em>的
所以而不是: -
while (pointer.moveToNext()){
name += pointer.getString(1);
time += pointer.getString(2);
date += pointer.getString(3);
}
您可以使用: -
if (pointer.moveToPosition(i)){
name = pointer.getString(1);
time = pointer.getString(2);
date = pointer.getString(3);
}
这确实假设指针光标和源数组的构建顺序是相同的。