Обновите CheckBox в строке ListView, которая соответствует строке базы данных - PullRequest
3 голосов
/ 16 января 2011

Я уже установил android:focusable="false" на свой CheckBox в моем пользовательском макете.Моя внутренняя база данных SQLite зависит от того, установлен флажок CheckBox или нет.Каждая строка в моем ListView соответствует строке в моей базе данных.Итак, мой вопрос: где я должен поставить OnClickListener для CheckBox, чтобы я мог обновить элемент, связанный с этой строкой ListView?Мне нужно было бы разместить его там, где у меня есть доступ к идентификатору.Может быть onListItemClick?

ОБНОВЛЕНИЕ:
Вот мой пользовательский адаптер:

package com.mohit.geo2do.adapters;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CursorAdapter;
import android.widget.Filterable;
import android.widget.TextView;

import com.mohit.geo2do.R;
import com.mohit.geo2do.provider.Task.Tasks;
import com.mohit.geo2do.utils.Util;

public class TasksAdapter extends CursorAdapter {

    private final Context context;

    public TasksAdapter(Context context, Cursor c) {
        super(context, c);
        this.context = context;
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        //Inflate the view 
        LayoutInflater inflater = LayoutInflater.from(context);
        View v = inflater.inflate(R.layout.row_item, parent, false);        
        return v;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        CheckBox checkbox = (CheckBox)view.findViewById(R.id.completed);
        TextView due_date = (TextView)view.findViewById(R.id.due_date);

        String title = cursor.getString(cursor.getColumnIndex(Tasks.TITLE));
        boolean completed = Util.intToBool(cursor.getInt(cursor.getColumnIndex(Tasks.COMPLETED)));

        SimpleDateFormat format = new SimpleDateFormat("EEEEEE, MMM dd yyyy hh:mm aa");
        long unixTime = cursor.getLong(cursor.getColumnIndex(Tasks.DUE_DATE));
        Calendar due = Util.timestampToDate(unixTime);

        due_date.setText(format.format(due.getTime()));
        checkbox.setText(title);
        checkbox.setChecked(completed);
    }
}

1 Ответ

3 голосов
/ 16 января 2011

Когда я сделал нечто подобное, я создал SimpleCursorAdapter и создал для него ViewBinder.

В setViewValue () для видоискателя, если представление является экземпляром Checkbox, затем добавьте setOnCheckedChangeListener для флажкакоторый обновляет базу данных БД.Если вам нужна дополнительная информация, дайте мне знать.

Может быть, если вы покажете мне, как вы создали SimpleCursorAdapter, то я могу показать вам, как идти дальше.

public void bindView(View view, Context context, Cursor cursor) {
        CheckBox checkbox = (CheckBox)view.findViewById(R.id.completed);
        TextView due_date = (TextView)view.findViewById(R.id.due_date);

        String title = cursor.getString(cursor.getColumnIndex(Tasks.TITLE));
        boolean completed = Util.intToBool(cursor.getInt(cursor.getColumnIndex(Tasks.COMPLETED)));

        SimpleDateFormat format = new SimpleDateFormat("EEEEEE, MMM dd yyyy hh:mm aa");
        long unixTime = cursor.getLong(cursor.getColumnIndex(Tasks.DUE_DATE));
        Calendar due = Util.timestampToDate(unixTime);

        due_date.setText(format.format(due.getTime()));
        checkbox.setText(title);
        checkbox.setChecked(completed);
        // edit here ..
        checkbox.setOnCheckedChangeListener(
         new CompoundButton.OnCheckedChangeListener() {
          public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
          // update your value in the db
        });

}

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