滚动Listview时查看可见性问题

斯瑞·雷迪·梅农(Sree Reddy Menon)

我有一个自定义的listview与textview和imageview和imageview像复选标记。在选择textview时,在Listview的OnItemClickListener上,我将使imageview Visibilty可见以显示所选内容。

 stickyList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
                stickyList.setOnItemClickListener(new OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {
                        // TODO Auto-generated method stub
                        String tag = (String) ((TextView) view
                                .findViewById(R.id.tvtag)).getText();
                         ImageView cb = (ImageView)
                         view.findViewById(R.id.ic_check);
                        if (cb.getVisibility() == View.VISIBLE) {
                            cb.setVisibility(
                                    View.GONE);

                            selectedtags.remove(tag);
                        } else {
                            cb.setVisibility(
                                    View.VISIBLE);
                            selectedtags.add(tag);
                        }
                    }
                });

直到Listview向下滚动时,它都可以正常工作。如果我选择了listview的前两个位置textview,则当我向下滚动listview时,前两个位置的imageview(cb)的可见性可见。

GetviewMethod:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHolder holder;
    if (convertView == null) {
        holder = new ViewHolder();
        convertView = mInflater.inflate(R.layout.recenttag_list_item,
                parent, false);
        holder.text = (TextView) convertView.findViewById(R.id.tvtag);
        holder.checkmark = (ImageView) convertView
                .findViewById(R.id.ic_check);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    holder.text.setText(data.get(position).mytag);
    return convertView;
}
脱线

您看到的原因是,列表项视图被回收了(这convertView是出于此目的)。当您滚动时ListView,屏幕上滚动的上一个项目将作为convertView下一个位置的信息传递回您的适配器

您需要确保在每次调用中完全重置项目视图的状态,getView()以便这样的更改不会从视图项目的一次使用泄漏到下一次使用。这可能意味着您必须始终检查该位置的当前“选中”值,getView()以确定它是否应该可见。

编辑:也许这将有助于...

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder holder;

    /* Unchanged code omitted */

    holder.text.setText(data.get(position).mytag);

    boolean checkVisible = ???; //Use whatever logic your app has to determine if this position should be checked
    holder.checkmark.setVisibility(checkVisible);  //Always set the visibility to what it should be for this position

    return convertView;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章