2012-12-01 2 views
2

저는 안드로이드와 새로운 소프트웨어를 개발했습니다. 체크 박스가있는 사용자 목록보기, 체크 박스 데이터를 데이터베이스에 삽입하는 방법 안 그래? 내 데이터베이스 클래스에서목록보기 및 체크 박스 (데이터베이스 (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

SQLite는 데이터베이스와 작업 할 수 있도록 간단한 DBhelper의 예입니다. 새로운 데이터를 추가하고 저장된 데이터를 업데이트하는 방법이 필요했습니다.

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에;

개인 DBHelper dbHelper;

전용 CursorAdapter 어댑터;

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

사용자 정의 OnCheckedChangeListener가있는 SimpleCursorAdapter의 예입니다. 아마도 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); 
     } 
} 
}