2011-01-15 2 views
3

이미 내 사용자 정의 레이아웃의 CheckBox에 android:focusable="false"을 설정했습니다. 내 백 엔드 SQLite 데이터베이스는 CheckBox가 선택되었는지 여부에 따라 달라집니다. 내 ListView의 각 행은 내 데이터베이스의 행에 해당합니다. 그래서 내 질문에, 내가 그 ListView 행과 관련된 항목을 업데이트 할 수 있도록 CheckBox에 대한 OnClickListener에 넣어해야합니까? 나는 이드에게 접근 할 수있는 곳에 배치해야한다. 어쩌면 onListItemClick?데이터베이스 행에 해당하는 ListView 행의 CheckBox 업데이트

UPDATE : 여기
내 사용자 지정 어댑터 : 나는 비슷한했을 때

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); 
    } 
} 

답변

3

, 나는 SimpleCursorAdapter를 생성하고 그것을 위해 ViewBinder를 만들었습니다.

뷰 바인더의 setViewValue()에서 뷰가 instanceof 체크 박스 인 경우 백엔드 db를 업데이트하는 체크 박스에 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 
     }); 

} ViewBinder 허용 무엇 API 수준에서

+0

? 그리고 커스텀 어댑터로 질문을 업데이트했습니다. –

+0

onCheckedChange() 메소드에 대한 논리를 추가하기 만하면됩니다. ViewBinder 질문에 대한 답변 : http://developer.android.com/reference/android/widget/SimpleCursorAdapter.ViewBinder.html – ekawas

관련 문제