为什么ListView会重复每3个项目?

时间:2013-11-19 12:38:51

标签: android listview repeat

当我点击第一行时,行1 , 4 , 7 , 10中的布局是可见的。

当我点击第二行时,行2 , 5 , 8 , 11中的布局是可见的

这是更新对于getView,我使用了持有人和(像id一样的标签)

private class ViewHolder { private LinearLayout[] myLay , myDesLay; }

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View row = convertView;
    final ViewHolder holder ;
    if(row == null){    
     row  = inflater.inflate(R.layout.list_items, parent , false);
     holder = new ViewHolder();
     holder.myLay = new LinearLayout[values.length];
     holder.myDesLay = new LinearLayout[values.length];
     for(int i = 0; i < holder.myLay.length;i++){
    holder.myLay[i] = (LinearLayout) row.findViewById(R.id.post_background); 
    holder.myDesLay[i] = (LinearLayout) row.findViewById(R.id.post_des_layout);
     }
     row.setTag(holder);
    }else{
        holder = (ViewHolder) row.getTag();
    }

     holder.myDesLay[position].setTag(values[position]);
     holder.myLay[position].setTag(values[position]);

    holder.myLay[position].setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

           String myTag = String.valueOf(v.getTag());
           String myTag2 = String.valueOf(holder.myDesLay[position].getTag());

           Toast.makeText(context, myTag2, Toast.LENGTH_LONG).show();

            if((clicked == false) && myTag2.equals(myTag) ){
            holder.myDesLay[position].setVisibility(View.VISIBLE);
            clicked = true;
            }else{
                holder.myDesLay[position].setVisibility(View.GONE);
                clicked = false;
            }

        }
    });
return row;}

更新

我看到谷歌的一个视频,谈论ListView,他们说问题可能是

在列表高度

并且应该使它成为WrapContent我做了这个,但它仍然重新开始:(

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
     >
</ListView>

2 个答案:

答案 0 :(得分:0)

每次向下滚动时,对可见性的更改都会影响listItem。因此,如果它是每组项目的当前可见列表中的第二项,则滚动浏览第二项将受到影响。

我会为每个列表项分配一个唯一的ID,然后在getView中为所有与该ID不匹配的项设置可见性为false。所以有字段并将它们设置为:

selectedID = currentID;

onClick()中,或者如果您需要存储多个点击的列表项,则将selectedID作为数组。

然后在getView()

if(currentID==selectedID)
    holder.desLayout.setVisibility(View.VISIBLE);
else
    holder.desLayout.setVisibility(View.GONE);

将其添加到原始代码中,以便onClick()

中的可见性仍会发生变化

答案 1 :(得分:0)

为每个列表项创建唯一ID“发布”您可以将项目插入到arraylist并使用索引访问它们而不是位置:)