ListView中的位置编号错误

时间:2014-06-21 18:37:24

标签: android listview position

我多次遇到这个问题,即使我无法解决它

来自Adapter

的代码
    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个屏幕时,它会再次重复,即使它的条件无法满足。

我该如何解决?

enter image description here

enter image description here

2 个答案:

答案 0 :(得分: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;

}

答案 1 :(得分:1)

此问题源自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);   

...