[英]Android SimpleCursorAdapter and Database Update
我刚开始从事Android开发,到目前为止,我一直很喜欢。 为了获得一些经验,我正在编写一个小的待办事项应用程序。 在我的数据库中,我有一个待办事项的状态,表示为int。 我在列表视图中使用一个复选框来表示此状态。 要将数据绑定到视图,我使用SimpleCursorAdapter的子类。 我将onClickListener添加到复选框中,以更新数据库中已用列表项的状态。 问题是,如果我使用以下代码,则该列表会在显示屏幕中搞砸(将检查许多项目):
@Override
public View getView(final int pos, View inView, ViewGroup parent) {
View view = inView;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.toodoolist_item, null);
}
cursor.moveToPosition(pos);
...
checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int state = 0;
if (checkBox.isChecked()) {
titleView.setPaintFlags(titleView.getPaintFlags()
| Paint.STRIKE_THRU_TEXT_FLAG);
titleView.setEnabled(false);
state = 1;
} else {
titleView.setPaintFlags(titleView.getPaintFlags()
^ Paint.STRIKE_THRU_TEXT_FLAG);
titleView.setEnabled(true);
}
ContentValues values = new ContentValues();
values.put(TooDooTable.STATE, state);
context.getContentResolver()
.update(ContentUris.withAppendedId(
TooDooTable.CONTENT_URI, id), values, null, null);
cursor.requery();
}
}
我当前的解决方法是每次使用充气机,即使inView不为null:
@Override
public View getView(final int pos, View inView, ViewGroup parent) {
View view = inView;
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.toodoolist_item, null);
...
这行得通,但是我不明白为什么我必须这样做。
在CurserAdapter中更新数据库并使更改立即反映在视图中的最佳实践是什么?
谢谢
凯
使用notifyDataSetChanged而不是重新查询,并且如果以前的方法没有执行任何操作,则可以在视图上使用invalidate 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.