具有多个选择和自定义适配器的Android ListView

我有一个带有自定义适配器的ListViewListView允许多个选择,但不知何故它不能识别何时选择一个项目。

我已经使适配器项扩展为Checkable,但getCheckedItemPositions()仍返回一个falses数组。

我想有一些基本的我做错了,但到目前为止,我还无法find多个选择ListViews的示例,其中适配器不是ArrayAdapter,使用多个选择的默认布局。

任何帮助将非常感激。

代码如下:

主要课程:

 listView = (ListView) findViewById(R.id.cardlist); tca = new TextCardAdapter(mInflater); listView.setAdapter(tca); 

适配器:

 public class TextCardAdapter extends BaseAdapter { private int count = 0; private List cardList = new ArrayList(); private LayoutInflater mInflater; public TextCardAdapter(LayoutInflater inflater) { this.mInflater = inflater; } @Override public int getCount() { return count; } @Override public Object getItem(int position) { return cardList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.textlayout_row, null, false); convertView.setClickable(true); holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.card_name); holder.checkbox = (CheckBox) convertView.findViewById(R.id.checkbox); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } final CheckableCard card = cardList.get(position); holder.text.setText(card.card.toString()); holder.checkbox.setChecked(card.isChecked()); holder.checkbox.setOnClickListener(card.checkListener); convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { card.checkListener.onClick(v); holder.checkbox.setChecked(card.isChecked()); } }); return convertView; } public void add(Card card) { cardList.add(new CheckableCard(card)); count++; notifyDataSetChanged(); } public void addAll(Collection cardColl) { for (Card c : cardColl) add(c); } public void removeAll() { count = 0; cardList.clear(); notifyDataSetChanged(); } public Card getCard(int position) { CheckableCard cc = (CheckableCard) getItem(position); if (cc == null) return null; return cc.card; } public class CheckableCard implements Checkable { private boolean checked = false; public final Card card; public final OnClickListener checkListener; public CheckableCard(Card card) { this.card = card; checkListener = new OnClickListener() { @Override public void onClick(View v) { toggle(); } }; } @Override public boolean isChecked() { return checked; } @Override public void setChecked(boolean checked) { this.checked = checked; } @Override public void toggle() { checked = !checked; } } static class ViewHolder { TextView text; CheckBox checkbox; } } 

    试一试:

    1. listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    2. holder.checkbox.setFocusable(false);

    3. 我认为这是listView的子项视图shoudld实现了Checkable接口,这意味着转换后的View(convertView)应该具有Checkable的所有方法。

    我曾经遇到过这样的问题。 它与您可以选择的适配器视图这一事实有关,导致父级忽略它。 删除它允许您再次选择列表视图的行。 你创建的基本上是按钮上的按钮,android不喜欢:-(

    我有类似的问题。 我的列表项视图是RealativeLayout,其中LinearLayout包含CheckBox和TextView。 没有onItem …在我将CheckBox.focusable设置为false之前调用了Listener。 此外,适配器中的对象不应该是Checkable,而是用作列表项布局的视图。