隐藏 listView 中的第一项 Android

Hide first item in listView Android

我正在开发一个 Android 项目,我尝试通过多种方式隐藏 listView 中的第一项:

  1. 如果我输入下一个代码,space 不会从 listView 中消失。

    convertView.setVisibility(View.GONE);

  2. 如果我输入下一个代码,项目会隐藏,但下一个项目会出现在 2px 高度的行中。

    if(condition){

    convertView.setLayoutParams(new AbsListView.LayoutParams(-1,1)); convertView.setVisibility(View.GONE);

    } else {

    if(convertView.getVisibility() == View.GONE) {
    convertView.setVisibility(View.VISIBLE);
    convertView.setLayoutParams(new AbsListView.LayoutParams(-1,-2));
    } }

有人可以帮助我吗?

提前致谢

看看这个answer

与其将可见性设置为 GONE,不如为其设置一个空布局

可以通过三种方式实现; 1 使用listview的headview并控制它;

2将itemlayout添加到一个viewGroup中,将这个viewGroup作为convertView,通过位置控制itemLayout可见与否;

3 通过不同的项目布局使用适配器的 viewType

只是想法..

我认为最好的选择是隐藏适配器中的第一项:

public class HideFirstItemListAdapter extends BaseAdapter {

    private List items;

    public RssListAdapter(Context context, List<RssEntry> items) {
        this.context = context;
        this.items = items;
    }

    @Override
    public int getCount() {
        return items.size() - 1;
    }

    @Override
    public RssEntry getItem(int position) {
        return items.get(position + 1);
    }

    @Override
    public long getItemId(int id) {
        return id;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // ...
    }
}

甚至在构造函数中只存储一个子列表:

public RssListAdapter(Context context, List<RssEntry> items) {
    this.context = context;
    this.items = items.subList(1, items.size());
}

并保持适配器为普通适配器: ... @覆盖 public int getCount() { return items.size(); }

@Override
public RssEntry getItem(int position) {
    return items.get(position);
}
...