Pin*_*ess 12 android listview multiple-select listadapter
我有一个ListView自定义适配器.在ListView允许多个选择,但不知何故,当一个项目被选中它不承认.
我已经使适配器项扩展了Checkable,但仍然getCheckedItemPositions()返回了一系列的falses.
我想有一些基本的我做错了,但到目前为止我还无法找到多个选择ListView的示例,其中适配器不是ArrayAdapter,使用多个选择的默认布局.
任何帮助将非常感激.
代码如下:
主要课程:
listView = (ListView) findViewById(R.id.cardlist);
tca = new TextCardAdapter(mInflater);
listView.setAdapter(tca);
Run Code Online (Sandbox Code Playgroud)
适配器:
public class TextCardAdapter extends BaseAdapter {
private int count = 0;
private List<CheckableCard> cardList = new ArrayList<CheckableCard>();
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<Card> 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;
}
}
Run Code Online (Sandbox Code Playgroud)
试一试:
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
holder.checkbox.setFocusable(false);
我认为这是listView的子项视图shoudld实现了Checkable接口,这意味着转换后的View(convertView)应该具有Checkable的所有方法.