首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在RecyclerView中为特定项添加项分隔符

如何在RecyclerView中为特定项添加项分隔符
EN

Stack Overflow用户
提问于 2018-10-12 13:33:05
回答 4查看 2.5K关注 0票数 2

是否可以仅为特定项在RecyclerView中添加项分隔符?目前,在每个项目之间正在应用项目分隔符。我想在下列地点增加一个分隔符:

  • B项C部分之间
  • 项目C3区段D之间
  • 项目D2区段E之间
  • 项目E3Item F1之间
  • 项目F1Item G1之间

电流结果

片段

代码语言:javascript
复制
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();
    }
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-10-12 13:53:08

如果我需要在各节之间设置一个分隔符,我将尝试在循环视图适配器类中为节标题定义一个类型:

代码语言:javascript
复制
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和一个分隔线在它下面。

代码语言:javascript
复制
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的一个实例。

代码语言:javascript
复制
@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 */
}

希望这能帮助你有一个想法,并在这方面取得进展!快乐编码:)

巴基

票数 0
EN

Stack Overflow用户

发布于 2018-10-12 13:43:56

一个解决方案是移除如下所有的分隔符:

首先定义您的RecyclerView:

RecyclerView recycle = (RecyclerView) findViewById(R.id.recyclerView);

在您的活动中,请使用以下方法:

代码语言:javascript
复制
recycle.addItemDecoration(new DividerItemDecoration(context, 0));

然后,在自定义适配器中,可以在需要的地方添加分隔符:

代码语言:javascript
复制
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"));
票数 1
EN

Stack Overflow用户

发布于 2018-10-12 13:42:48

是的,您可以在row.xml布局中创建自定义分隔符,并根据onBindViewholder()方法中的条件显示/隐藏它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52780671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档