0
我刚刚开始使用Android开发,并且非常喜欢它。为了获得 的一些经验,我正在写一个todo应用程序。在我的 数据库中,我有一个todo项目的状态,表示为int。我在列表视图中使用 复选框来表示此状态。为了将数据绑定到 的视图,我使用了SimpleCursorAdapter的子类。我将一个 onClickListener添加到更新数据库 中已使用列表项的状态的复选框。问题是,如果我用下面的代码, 列表中显示搞砸了(很多项目将被选中):Android SimpleCursorAdapter和数据库更新
@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不为空:
@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中的数据库并获取视图中立即反映的更改的最佳做法是什么?
感谢
凯