Java ListView-视图与许多行相关

Java ListView-视图与许多行相关,java,android,listview,Java,Android,Listview,我希望当我触摸列表视图中的项目时它消失。它正在工作,但是 问题是当我滚动列表时。随机项目正在消失或显示。 这是我的代码: private ListView list; (...) list = (ListView) findViewById(R.id.units_list); adapter = new UnitAdapter(this, R.layout.row_list, units); list.setAdapter(adapter); list.setOnItemClickListen

我希望当我触摸列表视图中的项目时它消失。它正在工作,但是 问题是当我滚动列表时。随机项目正在消失或显示。 这是我的代码:

private ListView list;
(...)
list = (ListView) findViewById(R.id.units_list);
adapter = new UnitAdapter(this, R.layout.row_list, units);
list.setAdapter(adapter);

list.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            v.setVisibility(View.INVISIBLE);
        }

    });
私有列表视图列表;
(...)
列表=(ListView)findViewById(R.id.units\u列表);
适配器=新的单元适配器(此,R.layout.row_列表,单位);
list.setAdapter(适配器);
list.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
v、 设置可见性(视图不可见);
}
});
ListView XML:

<ListView
    android:id="@+id/units_list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@id/strut"
    android:layout_marginTop="5dp" >
</ListView>

row_list.xml:

<RelativeLayout 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="${relativePackage}.${activityClass}" 
android:descendantFocusability="blocksDescendants"    >

<ImageView
    android:id="@+id/img"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_marginBottom="15dp"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="15dp"
    android:gravity="center_vertical" />

<TextView
    android:id="@+id/description"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_marginBottom="5dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="20dp"
    android:layout_marginTop="5dp"
    android:layout_toRightOf="@id/img"
    android:gravity="center_vertical"
    android:textSize="14sp" />

<ImageView
    android:id="@+id/upgrade"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_alignParentRight="true"
    android:layout_marginBottom="15dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="15dp"
    android:gravity="center_vertical" />

我也试过:

public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            list.getChildAt(position).setVisibility(View.INVISIBLE);
        }
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
list.getChildAt(位置).setVisibility(视图.不可见);
}
甚至:

public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            list.getChildAt((int) id).setVisibility(View.INVISIBLE);
        }
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
list.getChildAt((int)id).setVisibility(View.INVISIBLE);
}
但它的工作原理是一样的。
有什么问题?为什么视图与多行相关?如何解决此问题?

这可能与在Android中循环使用ListView中的视图有关,因此当您编辑一行时,在多行中滚动时可能会看到差异

一种解决方案是更新底层适配器,然后调用notifyDataSetChanged。但可能会有更平滑的解决方案

  • 使用视图保持架设计模式
  • 从列表视图中删除项目时,也要从列表中删除相同的项目(在您的案例单元中)

  • listview重用可见区域外的项