2012-07-21 100 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