0

我使用分段回收视图

在 Head 中只有 TextView 和按钮,在 Item 中只有 LinearLayout。

在这段代码之后:

ViewGroup mContainerParent = (ViewGroup) mainContainerArr.get(section).getParent();
if (mContainerParent != null) {
    mContainerParent.removeView(mainContainerArr.get(section));
}

所有的观点都开始转变。我认为需要做一些通知,但我不知道是哪一个。

我尝试过 notifySectionChanged(section)、notifyDataSetChanged() 等,但它不起作用。

代码:

头:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/details_description_head_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <ImageView
        android:id="@+id/details_description_head_caret"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</RelativeLayout>

物品:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/details_description_main_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
</LinearLayout>

适配器:

public class QuestDetailsRecyclerAdapter extends SectionedRecyclerViewAdapter<QuestDetailsRecyclerHolder> {

    private ArrayList<String> headTitleArr;
    private ArrayList<LinearLayout> mainContainerArr;

    int addSection(
            String head,
            LinearLayout container
    ) {
        // Add section
        headTitleArr.add(head);
        mainContainerArr.add(container);

        // Notify
        notifyDataSetChanged();

        return mainContainerArr.size() - 1;
    }

    QuestDetailsRecyclerAdapter(
            ArrayList<String> headTitleArr,
            ArrayList<LinearLayout> mainContainerArr
    ) {
        this.headTitleArr = headTitleArr;
        this.mainContainerArr = mainContainerArr;
    }

    @Override
    public int getSectionCount() {
        return headTitleArr.size();
    }

    @Override
    public int getItemCount(int section) {
        return mainContainerArr.get(section).getChildCount();
    }

    @Override
    public void onBindHeaderViewHolder(
            QuestDetailsRecyclerHolder holder,
            int section,
            boolean expanded
    ) {
        holder.title.setText(headTitleArr.get(section));
    }

    @Override
    public void onBindViewHolder(
            QuestDetailsRecyclerHolder holder,
            int section,
            int relativePosition,
            int absolutePosition
    ) {
        // Delete old parent if exists
        ViewGroup mContainerParent = (ViewGroup) mainContainerArr.get(section).getParent();
        if (mContainerParent != null) {
            mContainerParent.removeView(mainContainerArr.get(section));
        }

        // Add container (layout)
        holder.mainContainer.addView(mainContainerArr.get(section));
    }

    @Override
    public QuestDetailsRecyclerHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // Get layout id
        int layoutId;
        switch (viewType) {
            case VIEW_TYPE_HEADER:
                layoutId = R.layout.details_description_header;
                break;
            case VIEW_TYPE_ITEM:
                layoutId = R.layout.details_description_main;
                break;
            default:
                layoutId = R.layout.details_description_main;
        }

        // Inflate layout
        View view = LayoutInflater.from(parent.getContext())
                .inflate(layoutId, parent, false);

        return new QuestDetailsRecyclerHolder(view, this);
    }
}
4

1 回答 1

0

我用多种项目类型解决了这个问题。

教程

我的项目中的解决方案提交

于 2017-11-18T19:43:31.733 回答