如何在主活动的一个回收器视图中显示 2 个适配器?

我有 2 个适配器,我想在一个回收视图中显示 2 个适配器。例如,我有一个用于带有图像的帖子的适配器,另一个我有一个用于没有图像的帖子的适配器。我想显示带有图像的适配器帖子和没有图像的帖子,我尝试了一些,我的代码如下。


这是我的主要活动。


 //with image

  private List<ModelPostImage> postImageList;

  private AdapterImage adapterImage;


 //without image

private List<ModelPost> postList;

private AdapterPost adapterPost;


//load posts

 loadPostWithImage();

 loadPostWithoutImage();


 //loadWithImage

 private void loadPostWithImage() {

    DatabaseReference ref 

 FirebaseDatabase.getInstance().getReference("postImage");

    ref.addValueEventListener(new ValueEventListener() {

        @Override

        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {


            postImageList.clear();

            for (DataSnapshot ds : dataSnapshot.getChildren()) {

                ModelPostImage modelPostImage= 

                   ds.getValue(ModelPostImage.class);


                postImageList.add(modelPostImage);

                adapterImage= new AdapterImage(MainActivity.this, 

                 postImageList);

                //set adapter to RecyclerView

                recyclerView.setAdapter(adapterImage);



            }


        }


  //loadWithoutImage

   private void loadPostWithoutImage() {

    DatabaseReference ref 

 FirebaseDatabase.getInstance().getReference("Posts");

    ref.addValueEventListener(new ValueEventListener() {

        @Override

        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {


            postList.clear();

            for (DataSnapshot ds : dataSnapshot.getChildren()) {

                ModelPost modelPost= 

                   ds.getValue(ModelPost.class);


                postList.add(modelPost);

                adapterPost = new AdapterPost(MainActivity.this, 

                 postList);

                //set adapter to RecyclerView

                recyclerView.setAdapter(adapterPost);

它不显示带有图像的帖子,我该怎么办?


开心每一天1111
浏览 78回答 3
3回答

HUX布斯

对 RecyclerView 适配器使用 2 种 ViewHolder,而不是在 1 个 RecyclerView 中使用 2 个适配器

潇潇雨雨

我不认为你可以在一个 recyclerview 上使用 2 个适配器,但你可以做的是为你的适配器创建多个 viewholder 类型以实现不同类型的布局。

慕的地10843

您可以一次在一个适配器中RecyclerView添加一个或多个视图,而不是在一个适配器中使用两个适配器。您只需重写getItemViewType()适配器中的方法,如下所示:@Overridepublic int getItemViewType(int position){&nbsp; &nbsp;if(position==0)&nbsp; &nbsp; &nbsp;return LAYOUT_ONE;&nbsp; &nbsp;else&nbsp; &nbsp; &nbsp;return LAYOUT_TWO;}&nbsp;你可以onCreateViewHolder像这样添加你的观点:@Override&nbsp; &nbsp;public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {&nbsp; &nbsp; &nbsp; View view =null;&nbsp; &nbsp; &nbsp; RecyclerView.ViewHolder viewHolder = null;&nbsp; &nbsp; &nbsp; if(viewType==LAYOUT_ONE)&nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; view = LayoutInflater.from(parent.getContext()).inflate(R.layout.one,parent,false);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; viewHolder = new ViewHolderOne(view);&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; else&nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; view = LayoutInflater.from(parent.getContext()).inflate(R.layout.two,parent,false);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; viewHolder= new ViewHolderTwo(view);&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; return viewHolder;&nbsp; &nbsp;}并onBindViewHolder()做这样的事情:&nbsp; &nbsp; @Override&nbsp; &nbsp; &nbsp; &nbsp;public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(holder.getItemViewType()== LAYOUT_ONE)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Typecast Viewholder&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Set Viewholder properties&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Add any click listener if any&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ViewHolderOne vaultItemHolder = (ViewHolderOne) holder;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vaultItemHolder.name.setText(displayText);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vaultItemHolder.name.setOnClickListener(new View.OnClickListener() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;@Override&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public void onClick(View v) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .......&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;});&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java