Android SimpleCursorAdapter и обновление базы данных - PullRequest
0 голосов
/ 13 августа 2010

Я только начал разработку Android и мне это нравится.Чтобы получить некоторый опыт, я пишу небольшую заявку.В моей базе данных есть состояние элемента todo, представленное как 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и получить изменения немедленно отражены в представлении?

Спасибо

Кай

1 Ответ

0 голосов
/ 02 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...