实际上,我有一个菜单,可以在 recyclerView 中添加 MainActivity 按钮,在该菜单中我显示所有添加的按钮,以便可以删除所选按钮。
但是我有 4 个该 recyclerView 的第一个项目应该是默认的,所以没有人应该触摸它们,为了管理它,我已经做到了,如果滑动位置等于从 0 到 3,我将不执行任何操作,但我会将它们隐藏在该 recyclerView 中,并且仅显示添加的项目。
正如您在该图上看到的那样,1 是我的 MainActivity,有 4 个默认项目,在它们上面,我显示了添加的项目,而第二个是我的 SettingsActivity,我在其中添加了额外的项目,但现在它甚至显示了默认项目我会隐藏的。
解决这个问题的一种方法是操纵后备数组,以便RecyclerView
只是不知道缺少的视图。第二种方法是为那些缺失的位置分配高度为零的不同视图类型。一种用于可见位置,另一种用于不可见位置。以下是实现此概念的示例适配器:
RecyclerViewAdapter.java
class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<String> mItems;
RecyclerViewAdapter(List<String> items) {
mItems = items;
}
@Override
public @NonNull
RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
if (viewType == INVISIBLE_ITEM_TYPE) {
// The type is invisible, so just create a zero-height Space widget to hold the position.
view = new Space(parent.getContext());
view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0));
} else {
view = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
}
return new ItemViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
ItemViewHolder vh = (ItemViewHolder) holder;
String itemText = mItems.get(position);
if (vh.getItemViewType() == VISIBLE_ITEM_TYPE) {
// Only populate if a visible type.
vh.mItemTextView.setText(itemText);
int bgColor = (position % 2 == 0)
? android.R.color.holo_blue_light
: android.R.color.holo_green_light;
holder.itemView.setBackgroundColor(
holder.itemView.getContext().getResources().getColor(bgColor));
}
}
@Override
public int getItemCount() {
return (mItems == null) ? 0 : mItems.size();
}
@Override
public int getItemViewType(int position) {
// First 4 position don't show. The visibility of a position can be separately
// determined if only, say, the first and third position should be invisible.
return (position < 4) ? INVISIBLE_ITEM_TYPE : VISIBLE_ITEM_TYPE;
}
static class ItemViewHolder extends RecyclerView.ViewHolder {
private TextView mItemTextView;
ItemViewHolder(View item) {
super(item);
mItemTextView = item.findViewById(android.R.id.text1);
}
}
private final static int VISIBLE_ITEM_TYPE = 1;
private final static int INVISIBLE_ITEM_TYPE = 2;
}
我会发布一个视频,但它只会显示RecyclerView
从第 4 项开始。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)