2010-08-13 38 views
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中的数据库并获取视图中立即反映的更改的最佳做法是什么?

感谢

回答

相关问题