Android 未显示RecyclerView的空状态项
当没有要显示的项目时,我想显示一个“空状态”视图,我所做的是添加另一个viewType: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(); }
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);是的!我错了,谢谢你的帮助。如果您想将其添加为答案,我将接受它,并附上解释和建议的修复方法:)