0

我正在使用 aConcatAdapter为我的RecyclerView. 我正在使用两个RecyclerAdapters,一个不需要LayoutManager,一个需要一个GridLayoutManager。如何正确设置类LayoutManagerRecyclerAdapter?我试过这样做,它不会抛出任何错误,但数据不显示。

@NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.viewholder_card_preview, parent, false);

        int spacing = GridAdapterSpacingUtils.convertIntToDP(context, GRID_VIEW_SPACING);

        RecyclerView recyclerView = view.findViewById(R.id.recyclerview);

        GridLayoutManager gridLayoutManager = new GridLayoutManager(context, GRID_VIEW_ROWCOUNT);
        recyclerView.addItemDecoration(new GridAdapterItemDecoration(
                GRID_VIEW_ROWCOUNT, spacing, false)
        );

        recyclerView.setLayoutManager(gridLayoutManager);
        recyclerView.setAdapter(this);
        
        return new ViewHolder(view);
    }

没有语法错误,但我不确定我做错了什么。(当我在没有 的情况下对其进行测试时,Grid Recycler 工作正常ConcatAdapter)。

在此处输入图像描述

这是我关注的 Medium 帖子中的 Kotlin 语法,所以我不确定等效的 Java 语法是什么。

class BaseGridConcatAdapter(private val context: Context, private val animalAdapter: AnimalAdapter,private val spanCount:Int) :
    RecyclerView.Adapter<BaseConcatHolder<*>>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseConcatHolder<*> {
        val view = LayoutInflater.from(context).inflate(R.layout.animal_concat_row,parent,false)
        view.rv_animal_concat.layoutManager = GridLayoutManager(context, spanCount)
        return ConcatViewHolder(view)
    }

    override fun getItemCount(): Int  = 1

    override fun onBindViewHolder(holder: BaseConcatHolder<*>, position: Int) {
        when(holder){
            is ConcatViewHolder -> holder.bind(animalAdapter)
            else -> throw IllegalArgumentException("No viewholder to show this data, did you forgot to add it to the onBindViewHolder?")
        }
    }

    inner class ConcatViewHolder(itemView: View): BaseConcatHolder<AnimalAdapter>(itemView){
        override fun bind(adapter: AnimalAdapter) {
            itemView.rv_animal_concat.adapter = adapter
        }
    }
}

https://medium.com/@gsaillen95/how-to-inflate-different-layoutmanagers-for-each-adapter-with-concataadapter-76cdee6266ca

4

2 回答 2

1

不要将适配器设置为适配器中的RecyclerView,

将其设置在活动或片段中。

对于多个布局,请使用 ViewType。您还可以使用带有 setSpanSize() 的网格视图布局来设置布局。

看看这张图片。我现在正在努力 例子

现在从事这类工作

于 2021-08-06T19:42:41.260 回答
0

使用时extends RecyclerView.Adapter<RecyclerView.ViewHolder> 有一个回调方法用于附加 RecyclerView 时,如果您在上面执行此操作并尝试获取对 RecyclerView 的引用,onCreateViewHolder它将返回 null。

@Override
    public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);

        //Change the layout manager here
        GridLayoutManager gridLayoutManager = new GridLayoutManager(context, GRID_VIEW_COLUMN_COUNT);
        recyclerView.setLayoutManager(gridLayoutManager);
    }

就我而言,我试图将多种LayoutManager类型添加到连接适配器 ( e.g HorizontalLayout, VerticalLayout, GridLayout managers)。我仍然不知道这是否可能,但如果有人对此有答案,请发布它,我可以标记你的正确。

于 2021-03-31T19:00:54.000 回答