2

私は次のように見えるListViewを持っています:-

(チェックボックス) TEXT [編集テキスト]

(チェックボックス) TEXT [編集テキスト]

(チェックボックス) TEXT [編集テキスト]

...

私が本当に欲しいのは、チェックボックスでチェックされているすべての編集テキストの値を取得することです。

クラスを使用してMyItem値を取得および設定し、クラスを使用しMyAdpaterてアダプターを設定し、アイテムのレイアウトとMyViewアクティビティのクラスを使用しました。レイアウトにチェックボックスと編集テキストがあるため、レイアウトはonItemClick/onItemSelectedメソッドが機能しないため、リスト項目としてクリックされませんでした。

必要に応じて、さらに情報を追加します。

4

3 に答える 3

2

アダプターを使用して ListView を作成するときに、要素ごとに新しい CheckBox ビューを含むリストを作成して配列します。

ArrayList<CheckBox> a = new ArrayList<CheckBox>(16);
ArrayList<EditText> e = new ArrayList<EditText>(16);

public class Adapterwhatever extends asdljbg {

public View getChildVieworsomething(AdapterView<> viwe, int position..ydadayda) {



 //make sure you reset these
 a.add(new (CheckBox) findViewById(R.id.whateverman));
 b.add(new (EditText) findViewById(R.id.anEditText));

}

arrayLists を使用して、呼び出し後に値を確認します

adapter.notifyDataSetChanged();
于 2012-06-27T01:31:29.990 に答える
2

私は次の方法で似たようなことをしました(ダイアログとして使用されます)。チェックボックスは使用せず、リストを処理して、空でない編集テキストをすべて探します。

アダプタ

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ステートメントを実行できます。

于 2012-06-27T04:05:01.060 に答える
0

行のビューのクリックにアクセスできるようにするには、ItemsCanFocus を設定する必要がある場合があります。

この投稿をチェックしてくださいListView内のFocusable EditText

于 2012-06-27T01:24:43.613 に答える