2012-03-10 16 views
2

ListviewでSQLiteからデータを取得します。チェックボックス
をクリックして、削除ボタンを押すか、チェックボックスをクリックすると、この項目を削除する必要があります
これを行う方法はわかりません。ここに参考のためのサンプルコードがあります。listViewからアイテムを削除する方法は?

MyTable.java

public class MyTable extends ListActivity { 


MySQLiteHelper m=new MySQLiteHelper(this); 
@Override 
protected void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState);  
    Intent intent = getIntent(); 
    setResult(RESULT_OK, intent);  
    ArrayAdapter<Model> adapter = new InteractiveArrayAdapter(this, 
      getModel()); 
    setListAdapter(adapter); 
} 


private List<Model> getModel() 
{ 

    List<Model> list = new ArrayList<Model>(); 
    final MySQLiteHelper m=new MySQLiteHelper(getBaseContext()); 
    final List<LocWiseProfileBeans> LocWiseProfile= m.getAllLocWiseProfile();  

    for (final LocWiseProfileBeans cn : LocWiseProfile) { 

    list.add((get(cn.getLocname()))); 
    //list.add(get(cn.getSelectedprofile())); 

    // Initially select one of the items 
    list.get(0).setSelected(true); 

    } 
    return list; 
} 
private Model get(String s) { 
    return new Model(s); 
} 

InteractiveArrayAdapter.java

public class InteractiveArrayAdapter extends ArrayAdapter<Model> { 

private final List<Model> list; 
private final Activity context; 

public InteractiveArrayAdapter(Activity context, List<Model> list) 
{ 
    super(context, R.layout.locprofile, list); 
    this.context = context; 
    this.list = list; 
} 

static class ViewHolder { 
    protected TextView text; 
    protected CheckBox checkbox; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View view = null; 

    if (convertView == null) { 


     LayoutInflater inflator = context.getLayoutInflater(); 
     view = inflator.inflate(R.layout.locprofile, null); 

     final ViewHolder viewHolder = new ViewHolder(); 

     viewHolder.text = (TextView) view.findViewById(R.id.label); 
     viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check); 
     viewHolder.checkbox 
       .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

        @Override 
        public void onCheckedChanged(CompoundButton buttonView, 
          boolean isChecked) { 
         Model element = (Model) viewHolder.checkbox 
           .getTag(); 
         element.setSelected(buttonView.isChecked()); 

        } 
       }); 
     view.setTag(viewHolder); 
     viewHolder.checkbox.setTag(list.get(position)); 

    } else { 

     view = convertView; 
     ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position)); 

    } 


    ViewHolder holder = (ViewHolder) view.getTag(); 
    holder.text.setText(list.get(position).getName()); 
    holder.checkbox.setChecked(list.get(position).isSelected()); 


    return view; 
} 
} 

MySQliteHelper.java

public static final String TABLE_NAME = "loc_wise_profile"; 
public static final String TABLE_NAME2 = "supervisor"; 
public static final String COLUMN_ID = "_id"; 
public static final String COLUMN1 = "loc_name"; 
public static final String COLUMN2 = "lattitude"; 
public static final String COLUMN3 = "longitude"; 
public static final String COLUMN4 = "selectedprofile"; 
public static final String COLUMN5 = "contactno"; 
public static final String COLUMN6 = "message"; 
//public static final String COLUMN7 = "enabled"; 
public static final String COLUMN8 = "NotificeationMessage"; 

SQLiteDatabase db; 
private static final String DATABASE_NAME = "locale"; 
private static final int DATABASE_VERSION = 2; 

// Database creation sql statement 
private static final String DATABASE_CREATE = "create table IF NOT EXISTS " 
     + TABLE_NAME + "(" + COLUMN_ID 
     + " integer primary key autoincrement, " 
     + COLUMN1 + " text not null, " 
     + COLUMN2 + " double not null, " 
     + COLUMN3 + " double not null, " 
     + COLUMN4 + " text not null ," 
     + COLUMN5 + " text not null ," 
     + COLUMN6 + " text not null ," 
     //+ COLUMN7 + " text not null ," 
     + COLUMN8 + " text not null " 
     + ");"; 



public MySQLiteHelper(Context context) 
{ 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    // TODO Auto-generated constructor stub 
} 

@Override 
public void onCreate(SQLiteDatabase database) { 
    // TODO Auto-generated method stub 
    database.execSQL(DATABASE_CREATE); 
    //database.execSQL(DATABASE_CREATE2); 
} 


    // Adding new Location wise Profile 
public void insertLocWiseProfile(LocWiseProfileBeans loc) { 
    db= this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(COLUMN1, loc.getLocname()); // Contact Name 
    values.put(COLUMN2, loc.getLattitude()); // Contact Phone Number 
    values.put(COLUMN3, loc.getLongitude()); 
    values.put(COLUMN4, loc.getSelectedprofile()); 
    values.put(COLUMN5, loc.getContactno()); 
    values.put(COLUMN6, loc.getMessage()); 
    //values.put(COLUMN7, loc.getEnabled()); 
    values.put(COLUMN8, loc.getNotificationMessage()); 
    // Inserting Row 
    db.insert(TABLE_NAME, null, values); 
    db.close(); // Closing database connection 
} 



    // Getting All Contacts 
public List<LocWiseProfileBeans> getAllLocWiseProfile() { 
    List<LocWiseProfileBeans> LocWiseProfileList = new ArrayList<LocWiseProfileBeans>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_NAME; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      LocWiseProfileBeans loc= new LocWiseProfileBeans(); 
      //loc.set 
      loc.setId(cursor.getInt(0)); 
      loc.setLocname(cursor.getString(1)); 
      loc.setLattitude(cursor.getDouble(2)); 
      loc.setLongitude(cursor.getDouble(3)); 
      loc.setSelectedprofile(cursor.getString(4)); 
      loc.setContactno(cursor.getString(5)); 
      loc.setMessage(cursor.getString(6)); 
      // loc.setEnabled(cursor.getString(7)); 
      // Adding contact to list 
      LocWiseProfileList.add(loc); 
     } while (cursor.moveToNext()); 
    } 

    // return contact list 
    return LocWiseProfileList; 
} 


@Override 
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) { 
    // TODO Auto-generated method stub 
    Log.w(MySQLiteHelper.class.getName(), "Upgrading database from version " 
      + oldVersion + " to " + newVersion 
      + ", which will destroy all old data"); 
    database.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
    onCreate(database); 
} 
public void delete(int value) 
{ 
    try{    
     SQLiteDatabase db= this.getWritableDatabase(); 
     db.delete(TABLE_NAME, COLUMN_ID+"="+value, null); 

} 
    catch(Exception e){} 

} 


public void deleteAll(){ 
    try{ 
    //db.execSQL("delete * from "+ TABLE_NAME); 

     SQLiteDatabase db= this.getWritableDatabase(); 
     db.delete(TABLE_NAME, null, null); 

    }catch(Exception e){} 
} 

} 

答えて

1

あなたがからgetViewプロトタイプを変更する必要があります。その後、あなたのviewHolder.checkbox.setOnCheckedChangeListenerリスナーに追加

public View getView(final int position, View convertView, ViewGroup parent) 

public View getView(int position, View convertView, ViewGroup parent) 

Model element = (Model) viewHolder.checkbox.getTag(); 
element.setSelected(buttonView.isChecked()); 
InteractiveArrayAdapter.this.remove(InteractiveArrayAdapter.this.getItem(position)); 
list.remove(position); //here consider whether you can afford changing list 
// If you want to add code to remove the element from the database too 

私はそれを自分自身を試していないが、それはうまくいくようです。

EDIT:あなたは私はあなたのデータベースからエントリを削除するためのコードを追加してい要求に続き:

あなたMySQliteHelperクラスに次のメソッドを追加します

public void deleteByName(String name) {   
    SQLiteDatabase db= this.getWritableDatabase(); 
    db.delete(TABLE_NAME, COLUMN1 +"=?", new String [] { name }); 
    db.close(); 
} 

をその後のコードを変更リスナー:

Model element = (Model) viewHolder.checkbox.getTag(); 
element.setSelected(buttonView.isChecked()); 
InteractiveArrayAdapter.this.remove(InteractiveArrayAdapter.this.getItem(position)); 

MySQLiteHelper m = new MySQLiteHelper(InteractiveArrayAdapter.this.context); 
m.deleteNyName(list.get(position).toString()); 
list.remove(position); //here consider whether you can afford changing list 

ここではあなたの名前は一意であると仮定しています。これが真でない場合は、Modelクラスをリファクタリングする必要があります(あまりにも混乱していますが、私はmodel.toString()が名前の文字列を返すことを暴力的に推測しています)。

+1

データベースからも削除する必要があります。しかし、どのようにデータベースレコード_idに一致するのでしょうか? plsは私にデータベースからの削除のヒントコードを与えます。ありがとう –

+0

と私は1つのアイテムをクリックすると、すべてのアイテムを削除? –

+0

2番目のコメントについて:その結果か、それとも期待された動作かを意味しますか? Btw私のコードを少し修正しました。 –

1

OnListItemClickはちょうどのようなあなたのリストの要素を削除...

list.remove(position) 

、その後、ちょうどrefreshあなたのリストビューadpter.notifyDataSetChanged();

を使用してもGET値や位置を使用してから、データベースから削除します。

関連する問題