2013-04-24 45 views
0

我將盡快解釋我正在嘗試做什麼。我有一個自定義的listView,它填寫了SQLite數據庫的數據。一旦列表項被長按,它將被添加到收藏夾:我在數據庫中有一個單獨的列,其中「1」被分配給添加到收藏夾的條目。這一點一切都好。如何將db條目與列表視圖項相關聯

我現在想要做的是用星標記最喜歡的列表項。我想查詢數據庫,如​​,並在相應的列表項旁邊放置一個星號。問題是我不知道如何通過其position(或text?)調用特定列表項(checkbox?)並將其標記爲選中狀態。我怎樣才能做到這一點?

回答

0

這裏的CursorAdapter的例子列表與複選框。

public class ItemCursorAdapter extends CursorAdapter { 

private final LayoutInflater inflater; 
    private int itemNameIndex; 
    private int itemCheckIndex; 
    private DBHelper dbHelper; 
public ItemCursorAdapter(Context context, Cursor cursor, boolean autoRequery) { 
     super(context, cursor, autoRequery); 
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     itemNameIndex = cursor.getColumnIndex(DBHelper.ITEM.NAME); 
     itemCheckIndex = cursor.getColumnIndex(DBHelper.ITEM.CHECK); 
     dbHelper = DBHelper.getInstance(context); 
    } 
public void bindView(View view, Context context, Cursor cursor) { 
     String name = cursor.getString(itemNameIndex); 
     boolean checked = cursor.getInt(itemCheckIndex) > 0; 
     TextView nameTxt = (TextView) view.findViewById(R.id.item_name); 
     CheckBox checkChk = (CheckBox) view.findViewById(R.id.item_check); 
     checkChk.setOnCheckedChangeListener(new onItemCheckChangeListener(name)); 
     nameTxt.setText(name); 
     checkChk.setChecked(checked); 
    } 
@Override 
    public View newView(Context context, Cursor c, ViewGroup parent) { 
     View view = inflater.inflate(R.layout.row_item, null); 
     return view; 
    } 
private class onItemCheckChangeListener implements OnCheckedChangeListener { 
private String itemName; 
public onItemCheckChangeListener(String itemName) { 
      this.itemName = itemName; 
     } 
@Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      dbHelper.changeItemCheck(itemName, isChecked); 
     } 
} 
} 
And here example of table inside DBHelper 
public static interface ITEM extends BaseColumns { 
String TABLE_NAME = "itemTable"; 
String NAME = "itemName"; 
String CHECK = "itemCheck"; 
} 
Method to get cursor for list 
public Cursor getAllItemCursor() { 
return getReadableDatabase().rawQuery("SELECT * FROM " + ITEM.TABLE_NAME, null); 
} 

and to update checkbox status to db 
public void changeItemCheck(String itemName, boolean isChecked) { 
ContentValues values = new ContentValues(); 
values.put(ITEM.CHECK, isChecked); 
getWritableDatabase().update(ITEM.TABLE_NAME, values, ITEM.NAME + " =? ", new String[] { itemName }); 
} 
相關問題