2010-08-13 2 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(); 
    } 
} 

Мой текущий обходной путь заключается в использовании Inflater каждый раз, даже если в 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 и получить изменения, отраженные сразу же в представлении?

Благодаря

Kai

ответ

0

notifyDataSetChanged Используйте вместо Requery, и, возможно, использовать invalidate на представлении, если предыдущий метод ничего не делает.

Смежные вопросы