Android 不可见的 ListView 项

Android invisible ListView item

我有 ListView 并且我想隐藏一些项目,我使用 view.setVisibility(View.INVISIBLE) 并且效果很好,但是当 ListView 有很多项目并且我滚动然后在几个项目之后再次是隐形物品。

适配器:

public void setIndexHidenItem(int index){
    indexHidenItem = index;
}

public View getView(final int index, View view, ViewGroup group) {

    if (view == null) {
        view = LayoutInflater.from(mainContext).inflate(R.layout.hlist_item_template, null);
    }

更改可见性:

if (indexHidenItem != -1){
        if (index == indexHidenItem){
            if (view.getVisibility() == View.VISIBLE) {
                view.setVisibility(View.INVISIBLE);
            }
        }else{
            if (view.getVisibility() == View.INVISIBLE){
                view.setVisibility(View.VISIBLE);
            }
        }
    }

当您隐藏项目时,您应该记住哪个项目是不可见的,并且在您的适配器的 getView() 方法中,您应该检查当前项目是否应该可见并再次设置可见性。这是因为您的列表视图重用了它的项目,而传递给您的 getView() 方法的 convertView 实际上是您之前初始化的项目之一

原因:

这是一个传统的错误。您正在使用 ViewHolder 模式,该模式为多个列表视图项目重用相同的视图,并且您以某种方式获取视图并更改其属性,这将反映在再次重用该视图的每个列表视图项目上。

解法:

您应该在适配器的数据存储(ArrayList、HashMap、SparseArray 等)中记录此视图不可见并调用适配器的 notifyDataSetChanged() 并且在适配器的 getView() 中您将需要检查可见性并在此基础上进行更改。

您可以在适配器内部使用 getItemViewType()This example 向您展示如何使用它。但是你可以隐藏它而不是改变视图。这样它就不会 show/hide 查看它不应该