2012-12-01 35 views
2

我是新來的android和開發一個軟件,顯示用戶聯繫人列表視圖與複選框,如何將複選框數據插入數據庫,基於如果它被檢查或不?ListView和複選框(如何放入數據庫(sqlite))

在我的數據庫類,我有使用姓名和電話號碼添加到我的數據庫

createntry(String number,String name) // in my database class 

我真的想找到答案的函數,想通了,我應該使用getview功能這一點,但仍找不到解決方案。

我CursorAdapterClass

 public class ContactCursorAdapterCT extends CursorAdapter { 
    private ArrayList<Boolean> itemChecked = new ArrayList<Boolean>(); 
    private Context context1; 
    DataBaseBON dd1= new DataBaseBON(context1); 
     public ContactCursorAdapterCT(Context context, Cursor c) { 

    super(context, c); 
    this.context1 = context; 
    for (int i = 0; i < this.getCount(); i++) { 
     itemChecked.add(i, false); // initializes all items value with false 
    } 

} 

@Override 
public void bindView(View view, Context context, Cursor cursor) { 
     TextView name = (TextView)view.findViewById(R.id.contactlistTV1);  
      name.setText(cursor.getString 
      (cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))); 
      TextView phone = (TextView)view.findViewById(R.id.contactlistTV2);     
      phone.setText(cursor.getString   
      (cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))); 
} 

@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    LayoutInflater inflater = LayoutInflater.from(context); 
    View v = inflater.inflate(R.layout.lvct, parent, false); 
      bindView(v, context, cursor); 
    return v; 

} 

public View getView(final int pos, View inView, ViewGroup parent) { //getView 

    if (inView == null) { 
    LayoutInflater inflater = (LayoutInflater) context1 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    inView = inflater.inflate(R.layout.lvct, null); 
    } 

    final CheckBox cBox = (CheckBox)inView.findViewById(R.id.checkBox1); // my 
    // CheckBox 

    cBox.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      CheckBox cb = (CheckBox) v.findViewById(R.id.checkBox1); 

      if (cb.isChecked()) { 
       itemChecked.set(pos, true); 

         //My problem should be here?? 

      } else if (!cb.isChecked()) { 
       itemChecked.set(pos, false); 

      } 
     } 
    }); 
    cBox.setChecked(itemChecked.get(pos)); // this will Check or Uncheck the 
    // CheckBox in ListView 
    // according to their original 
    // position and CheckBox never 
    // loss his State when you 
    // Scroll the List Items. 
    return inView; 

我的活動類

public class Contacts extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.contacts); 

    Cursor cursor = getContentResolver().query 
      (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,null, null); 
     startManagingCursor(cursor); 
      ContactCursorAdapterCT adapter= new ContactCursorAdapterCT 
      (Contacts.this, cursor); 
     ListView contactLV = (ListView) findViewById(R.id.listviewblcontactsDB); 
      contactLV.setAdapter(adapter); 

我的數據庫類

public long creatEntry(String inputnumber , String name) { // for add data 

    // TODO Auto-generated method stub 
    ContentValues cv= new ContentValues(); 
    cv.put(KEY_NUMBER, inputnumber); 
    cv.put(N_NAME, name); 
    Log.v(inputnumber, "adding to Database"); 
    return ourdatabase.insert(DATABASE_TABLE, null, cv); 
} 
+0

我應該在哪裏調用createntry函數? –

回答

0

下面是簡單的例子,其DBhelper允許與SQLite數據庫工作的。它需要添加新數據和更新保存數據的方法。

public class DBHelper extends SQLiteOpenHelper { 

private static DBHelper instance; 
private static final String DATABASE_NAME = "HangmanBase"; 
    private static final int DATABASE_VERSION = 2; 
public static interface ITEM extends BaseColumns { 
     String TABLE_NAME = "itemTable"; 
     String NAME = "itemName"; 
     String CHECK = "itemCheck"; 
    } 
private static final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS "; 
    private static final String DROP_TABLE = "DROP TABLE IF EXISTS "; 
    private static final String UNIQUE = "UNIQUE ON CONFLICT ABORT"; 
private static final String CREATE_TABLE_ITEM = CREATE_TABLE + ITEM.TABLE_NAME + " (" + ITEM._ID 
      + " INTEGER PRIMARY KEY, " + ITEM.NAME + " TEXT " + UNIQUE + ", " + ITEM.CHECK + " INTEGER);"; 
private DBHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
public static DBHelper getInstance(Context context) { 
     if (instance == null) { 
      instance = new DBHelper(context); 
     } 
     return instance; 
    } 
@Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(CREATE_TABLE_ITEM); 
    } 
@Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL(DROP_TABLE + ITEM.TABLE_NAME); 
     onCreate(db); 
    } 
public long addWord(String name, boolean check) { 
     ContentValues values = new ContentValues(); 
     values.put(ITEM.NAME, name); 
     values.put(ITEM.CHECK, check); 
     return getWritableDatabase().insert(ITEM.TABLE_NAME, null, values); 
    } 
public Cursor getAllItemCursor() { 
     return getReadableDatabase().rawQuery("SELECT * FROM " + ITEM.TABLE_NAME, null); 
    } 
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 }); 
    } 
} 

一個的ListView簡單的活動:

私人的ListView itemList中;

private DBHelper dbHelper;

private CursorAdapter adapter;

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_cursor_list); 
     itemList = (ListView)findViewById(R.id.item_list); 
     dbHelper = DBHelper.getInstance(this); 
     Cursor allItemCursor = dbHelper.getAllItemCursor(); 
     adapter = new ItemCursorAdapter(this, allItemCursor, true); 
     itemList.setAdapter(adapter); 
    } 
} 

SimpleCursorAdapter與自定義OnCheckedChangeListener的示例。也許它不是最好的方式來保存檢查更改到DB:

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