当前位置: 首页 > 知识库问答 >
问题:

如何使用单个回收审查适配器进行多个布局?[副本]

尚棋
2023-03-14

我创建了一个回收器视图适配器,我想知道如何使用同一适配器的多个布局?首先,布局是一个可扩展的卡片视图,我想在另一个活动中使用这个适配器,另一个布局,我需要创建另一个适配器吗,或者有任何方法可以再次使用这个适配器?这是我的适配器代码:


public class BookRecyclerViewAdapter extends RecyclerView.Adapter<BookRecyclerViewAdapter.viewHolder> {


    private ArrayList<Book> books = new ArrayList<>();
    private Context context;

    public BookRecyclerViewAdapter(Context context) {
        this.context = context;
    }


    @NonNull
    @Override
    public viewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_book, parent, false);
        return new viewHolder(view);
    }


    @Override
    public void onBindViewHolder(@NonNull viewHolder holder, int position) {

        holder.txtName.setText(books.get(position).getName());
        holder.txtAuthor.setText(books.get(position).getAuthor());
        holder.txtDesc.setText(books.get(position).getShortDesc());

        Glide.with(context)
                .asBitmap()
                .load(books.get(position).getImgUrl())
                .into(holder.imgBook);

        holder.parent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, BookActivity.class);
                intent.putExtra(BOOK_ID_KEY, books.get(position).getId());
                context.startActivity(intent);
            }
        });

        

        if (books.get(position).isExpanded()) {
            TransitionManager.beginDelayedTransition(holder.parent);
            holder.expanded.setVisibility(View.VISIBLE);
            holder.downArrow.setVisibility(View.GONE);
        } else {
            TransitionManager.beginDelayedTransition(holder.parent);
            holder.expanded.setVisibility(View.GONE);
            holder.downArrow.setVisibility(View.VISIBLE);
        }
    }

    @Override
    public int getItemCount() {
        return books.size();
    }

    public void setBooks(ArrayList<Book> books) {
        this.books = books;
        notifyDataSetChanged();
    }

    public class viewHolder extends RecyclerView.ViewHolder {

        private CardView parent;
        private ImageView imgBook;
        private TextView txtName;

        private ImageView downArrow, upArrow;
        private RelativeLayout expanded, collapsed;
        private TextView txtAuthor, txtDesc;


        public viewHolder(@NonNull View itemView) {
            super(itemView);

            parent = itemView.findViewById(R.id.parent);
            imgBook = itemView.findViewById(R.id.imgBook);
            txtName = itemView.findViewById(R.id.txtBookName);

            downArrow = itemView.findViewById(R.id.btnDownArrow);
            upArrow = itemView.findViewById(R.id.btnUpArrow);
            expanded = itemView.findViewById(R.id.expandedRellayout);
            collapsed = itemView.findViewById(R.id.collapsedRelLayout);
            txtAuthor = itemView.findViewById(R.id.txtAuthor);
            txtDesc = itemView.findViewById(R.id.txtShortDesc);

            downArrow.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Book book = books.get(getAdapterPosition());
                    book.setExpanded(!book.isExpanded());
                    notifyItemChanged(getAdapterPosition());
                }
            });

            upArrow.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Book book = books.get(getAdapterPosition());
                    book.setExpanded(!book.isExpanded());
                    notifyItemChanged(getAdapterPosition());
                }
            });

        }
    }
}

共有1个答案

帅锦
2023-03-14

只是找到了解决方法,决定和大家分享一下。您可以在前一个项目布局中创建另一个布局,并使其可见性消失,在OnBindViewWholder中的adapter类中,您可以创建一个逻辑,将新活动中的可见性更改为“可见”。

   if ( parentActivity.equals("new Activity Name") {
   holder.newLayout.setVisibilty(Visible)
   }

 类似资料: