Android隐形ListView项

时间:2015-05-20 15:24:54

标签: android listview hide listitem invisible

我有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);
            }
        }
    }

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

<强>原因:

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

<强>解决方案:

您应该在适配器的数据存储(ArrayList,HashMap,SparseArray,....)中记录此视图不可见并调用Adapter的notifyDataSetChanged(),并且在适配器的Panel中,您需要检查能见度并改变它。

答案 2 :(得分:0)

您可以在适配器中使用getItemViewType()This example向您展示了如何使用它。但是,您可以隐藏它,而不是更改视图。这样它就不会显示/隐藏它不应该的视图