Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 滚动Listview时查看可见性问题_Android_Listview_Android Listview_Android Scrollbar - Fatal编程技术网

Android 滚动Listview时查看可见性问题

Android 滚动Listview时查看可见性问题,android,listview,android-listview,android-scrollbar,Android,Listview,Android Listview,Android Scrollbar,我有一个自定义的listview,带有textview和imageview,imageview类似于复选标记。选择textview时,在Listview的监听器上,我将imageview Visibility设置为visible,以显示所选内容 stickyList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); stickyList.setOnItemClickListener(new OnItemClickList

我有一个自定义的listview,带有textview和imageview,imageview类似于复选标记。选择textview时,在Listview的监听器上,我将imageview Visibility设置为visible,以显示所选内容

 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);
                        }
                    }
                });

您看到这种情况的原因是列表项视图被回收(这就是
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;
}

您看到这种情况的原因是列表项视图被回收(这就是
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;
}

我没听懂你的意思。你能说得更具体一点吗?我已经添加了快照。请再次检查!简单地说,当您滚动一个
列表视图时,滑入视图的项目不是从头创建的新视图,它们是滚动到屏幕外的旧视图,可以重复使用(或回收)。如果在
getView()
中将
convertView
交给您,则它是一个旧视图,您需要重置任何不特定于该位置的内容(在您的情况下,是图像可见性)。调用NotifiyDataSetChanged会有帮助吗?我现在该怎么办?你能添加一些代码吗?请不要,更新适配器不会改变任何事情。我试着用代码把它拼出来。非常感谢Dev!!你救了我一天。我从未想过Getview回收。我一直在google+上关注你。你太棒了。我没听懂。你能说得更具体一点吗?我已经添加了快照。再检查一遍!简单地说,当您滚动一个
列表视图时,滑入视图的项目不是从头创建的新视图,它们是滚动到屏幕外的旧视图,可以重复使用(或回收)。如果在
getView()
中将
convertView
交给您,则它是一个旧视图,您需要重置任何不特定于该位置的内容(在您的情况下,是图像可见性)。调用NotifiyDataSetChanged会有帮助吗?我现在该怎么办?你能添加一些代码吗?请不要,更新适配器不会改变任何事情。我试着用代码把它拼出来。非常感谢Dev!!你救了我一天。我从未想过Getview回收。我一直在google+上关注你。你太棒了。