我需要我的应用程序根据我的SQLite数据库中是否将每个项目的内容标记为已选中,对我的ListView中的每个项目的内容应用删除。现在,我从数据库表中获取列表视图中每个项目的文本,将其存储在List中,将其传递到ArrayAdapter,然后使用它来设置我的ListView适配器。这是我的代码:
private ListView taskList = (ListView) view.findViewById(R.id.task_list);
// Get text for each TextView from database
db.getWritableDatabase();
tasks = db.readTasks((int) listId);
// Set up adapter for ListView
adapter = new ArrayAdapter<String>(
view.getContext(),
android.R.layout.simple_expandable_list_item_1,
tasks);
taskList.setAdapter(adapter);
我的想法是在设置后迭代ListView中的每个项目,并检查数据库中的相应记录是否将其标记为已选中,然后根据项目采取相应措施。我不知道如何迭代ListView的内容,但我也不确定这是最好的方法。有谁知道如何迭代ListView的内容,还是有更好的方法来做到这一点?
答案 0 :(得分:0)
首先定义一个具有有用属性的Task对象:
class Task {
public boolean isComplete() {...};
@override String toString() {...};
}
然后让你的db方法返回这样的对象列表:
ArrayList<Task> tasks = db.readTasks((int) listId);
最后,继承ArrayAdapter:
private static class TaskAdapter extends ArrayAdapter<Task> {
private ArrayList<Task> mTasks;
TaskAdapter (Context c, ArrayList<Task> list) {
super(c, android.R.layout.simple_spinner_item, list);
mTasks = list;
}
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View v = super.getView(position, convertView, parent);
TextView txt = v.findViewById(android.R.id.text1);
int flags = txt.getPaintFlags();
if (mList.get(position).isComplete()) {
flags = flags | Paint.STRIKE_THRU_TEXT_FLAG;
} else {
flags = flags & ~Paint.STRIKE_THRU_TEXT_FLAG;
}
txt.setPaintFlags(flags);
}
}
当您对适配器进行子类化时,您还可以执行更多操作:例如。创建自己的视图布局(例如,如果你想要一个&#39; tick&#39; graphic而不是strikethough)。
谷歌举例说明了这种事情。有很多。