当我点击第一行时,行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>
答案 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并使用索引访问它们而不是位置:)