Android ListView中的位置编号错误

Android ListView中的位置编号错误,android,listview,position,Android,Listview,Position,我多次遇到这个问题,尽管我不能解决它 下面是来自适配器的代码 public View getView(final int position, View convertView, ViewGroup parent) { if(convertView == null){ LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATE

我多次遇到这个问题,尽管我不能解决它

下面是来自适配器的代码

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


        if(convertView == null){
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.place_item_layout, parent, false);
            //HERE's my check
            (convertView.findViewById(R.id.divdePlaces)).setVisibility(View.GONE);
            if (place.isTOP()==false && position!=0) if (places.get(position-1).isTOP()==true) {
                //turn back on
                (convertView.findViewById(R.id.divdePlaces)).setVisibility(View.VISIBLE);   
            }

.. etc..

}
return convertView;
}
因此,如果条件满足,只需打开分隔线。我认为这里的位置应该是真实的数字,但当ListView向上显示1个屏幕时,它会再次重复,即使不确定是否满足它的条件

我该如何解决这个问题


当您向上滚动一页时,您的视图开始被回收。因此,convertView已经膨胀且非空。切换if(convertView==null)块外部分隔符的可见性

大概是这样的:

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


    if(convertView == null)
    {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService Context.LAYOUT_INFLATER_SERVICE);

        convertView = inflater.inflate(R.layout.place_item_layout, parent, false);
    }

    int visibility = (place.isTOP()==false && position!=0) ? View.GONE : View.VISIBLE;
    convertView.findViewById(R.id.divdePlaces).setVisibility(visibility);

    return convertView;

}

此问题源于
ListView
中的视图重用。向下滚动时,从顶部退出的项目视图将被重新用于新项目(作为
convertView
提供)。因此,如果不再应用自定义项,则需要确保“撤消自定义项”

例如:

if (convertView == null)
{
     // create new view.
     convertView = inflater.inflate(...);
}

// OUTSIDE the previous if, and with both branches implemented.
if (check)
     (convertView.findViewById(R.id.divdePlaces)).setVisibility(View.VISIBLE);   
else
     (convertView.findViewById(R.id.divdePlaces)).setVisibility(View.GONE);   

...

您正在调用的isTOP函数是什么?此外,在滚动的情况下,您是否将视图设置回不可见状态?请记住,视图是重用的,UI的所有可视性、文本等必须在每次调用中完全设置getView@GabeSechanListView回收问题是否有适当的参考问题?到目前为止我还没有找到它,我正在考虑写一篇,但既然你在这里已经很久了,也许你已经知道一篇了?@matiash我不知道,我不太注意参考问题。我知道我和其他人以前都回答过这个问题。你可以随便找一个好的。此外,几年前谷歌I/O上有一段关于ListView如何工作的精彩视频,值得参考。