私は次の方法で似たようなことをしました(ダイアログとして使用されます)。チェックボックスは使用せず、リストを処理して、空でない編集テキストをすべて探します。
アダプタ
public class CursorAdapter_EditText extends SimpleCursorAdapter {
private static Cursor c;
private Context context;
public static String[] quantity;
private int layout;
public CursorAdapter_EditText(Context context, int layout, Cursor c,
String[] from, int[] to) {
super(context, layout, c, from, to);
CursorAdapter_EditText.c = c;
this.context = context;
this.layout = layout;
initializeQuantity(); // set array to hold contents od list edit text boxes
}
public static void initializeQuantity() {
quantity = new String[c.getCount()];
int i = 0;
while (i < c.getCount()) {
quantity[i] = "0"; // set all array quantities to 0
i++;
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = View.inflate(context, layout, null);
final int pos = position;
View row = convertView;
c.moveToPosition(position);
TextView name = (TextView) row.findViewById(R.id.ListItem1);
TextView unit = (TextView) row.findViewById(R.id.ListItem2);
EditText qty = (EditText) row.findViewById(R.id.qty);
qty.setOnFocusChangeListener(new View.OnFocusChangeListener() { // save changes to the array when the user leaves an edit box
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
LinearLayout parent = (LinearLayout) v.getParent();
EditText qtyTemp = (EditText) parent.findViewById(R.id.qty);
quantity[pos] = qtyTemp.getText().toString();
}
}
});
name.setText(c.getString(1));
unit.setText(c.getString(3));
qty.setText(quantity[position]); // set the value in the edit box to the value stored in the array
return (row);
}
}
次に、ユーザーが必要なものを編集したら、リストを処理するためのリストビューを保持するボタンをレイアウトに配置します。
ボタンコード
commit.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
int i = 0;
itemCursor.moveToFirst();
while (itemCursor.isAfterLast() == false) {
if (CursorAdapter_EditText.quantity[i].equals("")) {
CursorAdapter_EditText.quantity[i] = "0";
}
;
int tempQty = Integer
.parseInt(CursorAdapter_EditText.quantity[i]);
if (tempQty != 0) {
mDbHelper.createListItem(listId, itemCursor
.getInt(itemCursor
.getColumnIndex(GroceryDB.ITEM_ROWID)),
tempQty, 0);
}
i++;
itemCursor.moveToNext();
}
dismiss();
}
});
チェックボックスの状態を追跡する配列を追加し、edittext の値の代わりにそれを使用してif
ステートメントを実行できます。