2012-07-21 102 views
0

我爲我的ListView使用自定義列表適配器。如何從複選框中獲取數據庫rowid/_id,以便可以從數據庫中多次刪除數據?已選擇ListView複選框從數據庫中刪除

這裏是我的活動:

import android.app.ListActivity; 
import java.text.DecimalFormat; 
import org.yhw.PlanWithMe.R; 
import android.content.*; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.*; 
import android.widget.CompoundButton.OnCheckedChangeListener; 
import android.database.Cursor; 

public class Finance_delete extends ListActivity { 
    Cursor cursor; 
    private TextView dateText; 
    private Button btnCancel; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.finance_delete); 

     registerForContextMenu(this.getListView()); 
     DBAdapter dbHelper = new DBAdapter(this); 
     dbHelper.open(); 

     // Get a Cursor for the list items 
     Intent intent = getIntent(); 
     String date = intent.getStringExtra("date"); 
     Cursor listCursor = dbHelper.getAllFinance(date); 
     startManagingCursor(listCursor); 

     // set the custom list adapter 
     setListAdapter(new MyListAdapter(this, listCursor)); 

     dateText = (TextView) findViewById(R.id.lblDate); 
     dateText.setText("Delete Spending: " + date); 

     btnCancel = (Button) findViewById(R.id.btnCancel); 
     btnCancel.setOnClickListener(click_listener); 
    } 

    private class MyListAdapter extends ResourceCursorAdapter { 

     public MyListAdapter(Context context, Cursor cursor) { 
      super(context, R.layout.list_item_with_description_delete, cursor); 
     } 

     @Override 
     public void bindView(View view, Context context, Cursor cursor) { 

      CheckBox cbListCheck = (CheckBox) view 
        .findViewById(R.id.list_checkbox); 
      cbListCheck.setChecked(false); 

      cbListCheck 
        .setOnCheckedChangeListener(new OnCheckedChangeListener() { 
         public void onCheckedChanged(CompoundButton cb, 
           boolean isChecked) { 
          if (cb.isChecked()) { 
           // action 


          } else if (isChecked == false) { 
           // action 

          } 
         } 
        }); 

      TextView title = (TextView) view.findViewById(R.id.list_category); 
      title.setText(cursor.getString(cursor 
        .getColumnIndex(DBAdapter.KEY_Category))); 

      TextView details = (TextView) view.findViewById(R.id.list_desc); 
      StringBuffer detailsText = new StringBuffer(); 

      String description = cursor.getString(cursor 
        .getColumnIndex(DBAdapter.KEY_Desc)); 

      TextView spendings = (TextView) view 
        .findViewById(R.id.list_spending); 

      String spending = cursor.getString(cursor 
        .getColumnIndex(DBAdapter.KEY_Spending)); 

      double tgtspend = Double.parseDouble(spending); 
      DecimalFormat dFormat = new DecimalFormat("0.00"); 
      String formatSpend = dFormat.format(tgtspend); 
      spendings.setText("$" + formatSpend); 

      if (description != null && description.length() > 0) { 
       detailsText.append(description); 
      } else { 
       detailsText.append("-"); 
      } 
      details.setText(detailsText.toString()); 

     } 
    } 

    private OnClickListener click_listener = new OnClickListener() { 
     public void onClick(View view) { 
      // Intent intent = null; 
      switch (view.getId()) { 
      case R.id.btnCancel: 
       finish(); 
       break; 
      } 
     } 
    }; 
} 

我的動態佈局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/finance_top" /> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="45dp" 
     android:src="@drawable/navbar" /> 

    <TextView 
     android:id="@+id/lblDate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="5dp" 
     android:layout_marginTop="57dp" 
     android:layout_alignParentLeft="true" 
     android:textColor="#ffffff" 
     android:textSize="16dp" /> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="240dp" 
     android:layout_marginTop="48dp" 
     android:src="@drawable/divider" /> 

    <Button 
     android:id="@+id/btnTick" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="45dp" 
     android:layout_marginTop="56dp" 
     android:background="@drawable/btn_tick" /> 

    <Button 
     android:id="@+id/btnCancel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="6dp" 
     android:layout_marginTop="56dp" 
     android:background="@drawable/btn_cancel" /> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="282dp" 
     android:layout_marginTop="48dp" 
     android:src="@drawable/divider" /> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_marginTop="92dp" 
     android:orientation="vertical" > 

     <ListView 
      android:id="@android:id/list" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" /> 

     <TextView 
      android:id="@android:id/empty" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="106dp" 
      android:layout_marginTop="180dp" 
      android:text="@string/finance_note" 
      android:textColor="#ffffff" 
      android:textSize="18dp" /> 
    </LinearLayout> 

</RelativeLayout> 

我的ListView的佈局:您複選框

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" > 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:layout_weight="1" 
     android:duplicateParentState="true" > 

     <TextView 
      android:id="@+id/list_category" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:gravity="center_vertical" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <TextView 
      android:id="@+id/list_desc" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_below="@id/list_category" 
      android:singleLine="true" 
      android:textAppearance="?android:attr/textAppearanceSmall" /> 

     <TextView 
      android:id="@+id/list_spending" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:gravity="center" 
      android:paddingBottom="10dip" 
      android:paddingTop="10dip" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <CheckBox 
      android:id="@+id/list_checkbox" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:checked="false" 
      android:text="" > 
     </CheckBox> 
    </RelativeLayout> 

</LinearLayout> 

回答

2

1)連接使用checkbox.setTag屬性ID。

2)在您的刪除按鈕單擊事件執行以下邏輯。

  • 遍歷所有複選框
  • 收集那些誰使用checkbox.getTag屬性檢查密碼的ID和收集它作爲逗號分隔。
  • 使用逗號分隔值進行刪除操作。

希望你明白了,請檢查link for conceptual的實現。

+0

我試過這種方法。當我檢查時,我會得到rowid,並仍然是一個字符串。多重檢查將+ =「,」字符串。但是,如果我取消選中它,則ID仍然在字符串中。無論如何刪除該字符串的ID? – reson90 2012-07-30 12:08:10

+0

再次閱讀我的答案;您試圖在每次點擊CHECKBOX時對其進行管理,而我建議您在按下刪除按鈕後收集ID,方法是循環顯示所有元素,並選擇已選中的人的ID等於已檢查過的......這樣您將擁有全部檢查其值的ID。 – 2012-07-30 12:14:32

+0

我可以有任何編碼的例子嗎?我不太確定該怎麼做 – reson90 2012-07-30 12:33:53