我尝试使用以下代码动态隐藏 GridView 中的一些项目:
public class GridHelper extends ArrayAdapter<Object>
{
private Context context;
private int layoutResourceId;
private ArrayList<Object> mainlist = null;
private ArrayList<Object> sichtbar = null;
public GridHelper(Context context, int layoutResourceId, ArrayList<Object> mainlist)
{
super(context, layoutResourceId, mainlist);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.mainlist = mainlist;
this.sichtbar = ArrayList<Object>();
// that's important otherwith the items are doublicated but the items
// are inside the List. I think the add method is called somewhere
// in the super constructor
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, null);
Object t = sichtbar.get(position);
if(t != null)
{
row = (View) t;
}
}
return row;
}
@Override
public int getCount()
{
return sichtbar.size();
}
@Override
public void add(Object object)
{
super.add(object);
sichtbar.add(object);
}
public void show(int pos)
{
if(sichtbar.contains(mainlist.get(pos)) == false)
{
sichtbar.add(mainlist.get(pos));
notifyDataSetChanged();
}
}
public void hide(int pos)
{
if(sichtbar.contains(mainlist.get(pos)) == true)
{
sichtbar.remove(mainlist.get(pos));
notifyDataSetChanged();
}
}
}
但是搜索功能不起作用。该列表在我的显示/隐藏方法之后具有正确的大小,但第一项 ( mainlist .get(0)
) 始终可见,我认为它涵盖了正确的项目。我发现该getView
方法的调用次数总是比列表的大小多一倍。如果列表有 3 个项目,则该getView
方法被调用 4 次,依此类推。
第二件事是:如果我的 GridView 中有 3 个项目并为两个项目调用隐藏函数,则该getView
方法被调用 4 次(旧尺寸 + 1),然后再调用 2 次(新尺寸 + 1)。这很奇怪不是吗?
这是为什么?我认为它背后的逻辑是正确的,不是吗?