Android 未显示RecyclerView的空状态项

Android 未显示RecyclerView的空状态项,android,android-recyclerview,Android,Android Recyclerview,当没有要显示的项目时,我想显示一个“空状态”视图,我所做的是添加另一个viewType: private static final int ITEM = 0; private static final int LOADING = 1; private static final int EMPTY_STATE = 2; @Override public int getItemCount() { return dataset == null ? 1 : dataset.size(); }

当没有要显示的项目时,我想显示一个“空状态”视图,我所做的是添加另一个viewType:

private static final int ITEM = 0;
private static final int LOADING = 1;
private static final int EMPTY_STATE = 2;

@Override
public int getItemCount() {
    return dataset == null ? 1 : dataset.size();
}

@Override
public int getItemViewType(int position) {
    if (dataset == null) {
        return EMPTY_STATE;
    } else if (position == dataset.size() - 1 && isLoadingAdded) {
        return LOADING;
    } else {
        return ITEM;
    }
}
如果dataset==null,则返回空状态的视图

我还为以下内容添加了相应的代码:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    RecyclerView.ViewHolder viewHolder = null;
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());

    switch (viewType) {
        case ITEM:
            viewHolder = getFeedItemViewHolder(parent, inflater);
            break;
        case LOADING:
            viewHolder = new LoadingVH(inflater.inflate(R.layout.item_loading, parent, false));
            break;
        case EMPTY_STATE:
            viewHolder = new EmptyStateVH(inflater.inflate(R.layout.textview_first_time_text, parent, false));
            break;
    }
    return viewHolder;
}
对于
onBindViewHolder

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {

    switch (getItemViewType(position)) {
        case ITEM:
             // code here...
           break;
        case EMPTY_STATE:
            final EmptyStateVH emptyStateVH = (EmptyStateVH) holder;
            break;
     }
}
但是上面的代码不起作用。对于空数据集,不应该返回空的\u视图吗?逻辑是错误的吗?我应该找到另一种方法吗?我想要避免的是将逻辑移动到
活动
中,我将在那里拥有一个
框架布局
,其中有一个空状态的不可见重叠视图,我将在没有项目时将可见性更改为
可见
。我想避免它,因为我有一个
MainActivity
和许多
Fragment
s,并且我想为每一个使用不同的空状态


谢谢

此处的薄弱点:

@Override
public int getItemCount() {
    return dataset == null ? 1 : dataset.size();
}
如果您的数据集不为null,但仅为空(dataset.size()==0),这将基本上破坏您的代码。稍加修改即可防止这种情况发生:

@Override
public int getItemCount() {
    return (dataset == null || dataset.isEmpty()) ? 1 : dataset.size();
}

试试这个:

private static final int ITEM = 0;
private static final int LOADING = 1;
private static final int EMPTY_STATE = 2;

@Override
public int getItemCount() {
    return dataset.size() == 0? 1 : dataset.size();
}

@Override
public int getItemViewType(int position) {
    if (dataset.size() == 0) {
        return EMPTY_STATE;
    } else if (position == dataset.size() - 1 && isLoadingAdded) {
        return LOADING;
    } else {
        return ITEM;
    }
}

dataset
是否可能不是空的,而是空的(因此dataset.size()返回0);是的!我错了,谢谢你的帮助。如果您想将其添加为答案,我将接受它,并附上解释和建议的修复方法:)