![](/img/trans.png)
[英]How can I add a single divider after a few items to seperate a group in RecyclerView?
[英]How to add item divider in RecyclerView for specific items
是否可以仅在RecyclerView
为特定项目添加项目分隔RecyclerView
? 目前,项目分隔符被应用在每个项目之间。 我想在以下位置添加分隔线:
当前结果
分段
public class FragmentRV extends android.support.v4.app.Fragment {
RecyclerView mRecyclerView;
public FragmentRV() {}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_rv, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
View v = getView();
assert v != null;
mRecyclerView = v.findViewById(R.id.my_recyclerview);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));
mRecyclerView.addItemDecoration(new DividerItemDecoration(Objects.requireNonNull(getContext()), LinearLayout.VERTICAL));
super.onActivityCreated(savedInstanceState);
initRVAdapter();
}
private void initRVAdapter(){
List<Object> itemsList = new ArrayList<>();
RVItemsAapter itemsListAdapter = new RVItemsAapter(getContext());
mRecyclerView.setAdapter(itemsListAdapter);
itemsList.add(new SMSmessage("Item A","Item A description"));
itemsList.add(new Phonecall("Item B","Item B description"));
itemsList.add(new SectionHeader("Section C"));
itemsList.add(new SMSmessage("Item C1","Item C1 description"));
itemsList.add(new SMSmessage("Item C2","Item C2 description"));
itemsList.add(new SMSmessage("Item C3","Item C3 description"));
itemsList.add(new SectionHeader("Section D"));
itemsList.add(new SMSmessage("Item D1","Item D1 description"));
itemsList.add(new SMSmessage("Item D2","Item D2 description"));
itemsList.add(new SectionHeader("Section E"));
itemsList.add(new SMSmessage("Item E1","Item E1 description"));
itemsList.add(new SMSmessage("Item E2","Item E2 description"));
itemsList.add(new SMSmessage("Item E3","Item E3 description"));
itemsList.add(new SMSmessage("Item F1","Item F1 description"));
itemsList.add(new Phonecall("Item G1","Item G1 description"));
itemsListAdapter.setCallSMSFeed(itemsList);
itemsListAdapter.notifyDataSetChanged();
}
}
一种解决方案是删除所有分隔符,如下所示:
首先定义你的 RecyclerView :
RecyclerView recycle = (RecyclerView) findViewById(R.id.recyclerView);
并在您的活动中使用此方法:
recycle.addItemDecoration(new DividerItemDecoration(context, 0));
然后在您的自定义适配器中,您可以在您想要的位置添加分隔线:
itemsList.add(new SMSmessage("Item A","Item A description"));
itemsList.add(new Phonecall("Item B","Item B description"));
itemsList.add(new YourCustomDivider());
itemsList.add(new SectionHeader("Section C"));
是的,你可以做的是在你的 row.xml 布局中,创建你的自定义分隔符并根据onBindViewholder()
方法中的条件显示/隐藏它
如果我需要部分之间的分隔符,我会尝试在 recyclerview 适配器类中全局定义部分标题的类型:
private static final int TYPE_SMS_MESSAGE = 0;
private static final int TYPE_PHONE_CALL = 1;
private static final int TYPE_SECTION_HEADER = 2;
然后我会返回一个带有 TextView 的布局和它下面的分隔线。
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case TYPE_SMS_MESSAGE:
// return a view as you did before
case TYPE_PHONE_CALL:
// return a view as you did before
case TYPE_SECTION_HEADER:
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.section_header_layout, null);
return new YourRecyclerViewHolder(v);
default:
return null;
}
}
为了能够检测并返回此布局,您需要检测它是 SectionHeader 的实例。
@Override
public int getItemViewType(int position) {
if (itemList.get(position) instanceof SectionHeader) {
return TYPE_SECTION_HEADER;
}
/* return TYPE_SECTION_HEADER if the data in the list is an instance of
SectionHeader and other corresponding types as well */
}
希望这会帮助你有一个想法并在它上取得进展! 快乐编码:)
巴基
解决方案是编写自定义 RecyclerView.ItemDecoration 并仅在您想要的地方绘制分隔线。 您应该覆盖发生魔法的 onDraw() 方法。 您可以使用以下代码在 RecyclerView 中设置自定义 ItemDecoration:
recyclerView.addItemDecoration(new CustomItemDecoration());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.