【发布时间】:2015-07-08 16:16:46
【问题描述】:
我已经实现了一个带有自定义 ArrayAdapter 的 ListView,其中每一行都包含一个 CheckedTextView 小部件。当我检查 ListView 的第一项并向下滚动时,我发现 ListView 的其他项目也被检查,并且我向下滚动更多,我发现元素被检查。看起来我检查的第一个孩子如何复制到其他不可见的 listview 孩子。
我知道我们可以选择使用choiceMode,但这不适用于自定义ArrayAdapter,我必须使用自定义ArrayAdapter。 ArrayAdapter的对象类型是String,我在网上找到了自定义模型的例子来维护checkbox标签,但是由于我使用的是String,所以我不能这样做。
我正在粘贴我的适配器代码:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final ViewHolderClass viewHolder;
if(convertView==null)
{
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.disruption_routes_list_child, parent, false);
viewHolder = new ViewHolderClass();
initUI(convertView, viewHolder);
convertView.setTag(viewHolder);
}
else
{
viewHolder = (ViewHolderClass) convertView.getTag();
}
viewHolder.ctvRoutes.setText(alRoutes.get(position));
viewHolder.ctvRoutes.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(viewHolder.ctvRoutes.isChecked())
{
viewHolder.ctvRoutes.setChecked(false);
}
else
{
viewHolder.ctvRoutes.setChecked(true);
}
}
});
return convertView;
}
private void initUI(View convertView, ViewHolderClass viewHolder) {
// TODO Auto-generated method stub
viewHolder.ctvRoutes = (CheckedTextView) convertView.findViewById(R.id.ctvRoutes);
}
static class ViewHolderClass
{
CheckedTextView ctvRoutes;
}
【问题讨论】:
-
尝试每次都强制初始化新的
ViewHolderClass,而不是使用回收的并回发结果。 -
你检查我的答案了吗
标签: android listview checkbox state checkedtextview