是否可以仅为特定项在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();
}
}发布于 2018-10-12 13:53:08
如果我需要在各节之间设置一个分隔符,我将尝试在循环视图适配器类中为节标题定义一个类型:
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 */
}希望这能帮助你有一个想法,并在这方面取得进展!快乐编码:)
巴基
发布于 2018-10-12 13:43:56
一个解决方案是移除如下所有的分隔符:
首先定义您的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"));发布于 2018-10-12 13:42:48
是的,您可以在row.xml布局中创建自定义分隔符,并根据onBindViewholder()方法中的条件显示/隐藏它。
https://stackoverflow.com/questions/52780671
复制相似问题