Java 如何将信息从一个适配器传递到另一个适配器?

Java 如何将信息从一个适配器传递到另一个适配器?,java,android-recyclerview,interface,navigation,sharedpreferences,Java,Android Recyclerview,Interface,Navigation,Sharedpreferences,我有两个适配器,一个用于卡视图,另一个用于抽屉。卡片包含应用程序中其他选项的链接,抽屉包含相同的选项。我想要的是,当用户点击卡片时,抽屉菜单中的选项应该被选中。这是我的密码 抽屉适配器: @SuppressWarnings({"rawtypes", "ConstantConditions"}) public class DrawerAdapter extends RecyclerView.Adapter<DrawerAdapter.ViewHolde

我有两个适配器,一个用于卡视图,另一个用于抽屉。卡片包含应用程序中其他选项的链接,抽屉包含相同的选项。我想要的是,当用户点击卡片时,抽屉菜单中的选项应该被选中。这是我的密码

抽屉适配器:

@SuppressWarnings({"rawtypes", "ConstantConditions"})
public class DrawerAdapter extends RecyclerView.Adapter<DrawerAdapter.ViewHolder> {

    private List<DrawerItem> items;
    private Map<Class<? extends DrawerItem>, Integer> viewTypes;
    private SparseArray<DrawerItem> holderFactories;

    private   OnItemSelectedListener listener;

    public DrawerAdapter(List<DrawerItem> items) {
        this.items = items;
        this.viewTypes = new HashMap<>();
        this.holderFactories = new SparseArray<>();

        processViewTypes();
    }


    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        ViewHolder holder = holderFactories.get(viewType).createViewHolder(parent);
        holder.adapter = this;
        return holder;
    }

    @Override
    @SuppressWarnings("unchecked")
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        items.get(position).bindViewHolder(holder);
    }

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

    @Override
    public int getItemViewType(int position) {
        return viewTypes.get(items.get(position).getClass());
    }

    private void processViewTypes() {
        int type = 0;
        for (DrawerItem item : items) {
            if (!viewTypes.containsKey(item.getClass())) {
                viewTypes.put(item.getClass(), type);
                holderFactories.put(type, item);
                type++;
            }
        }
    }

    public void setSelected(int position) {
        DrawerItem newChecked = items.get(position);
        if (!newChecked.isSelectable()) {
            return;
        }

        for (int i = 0; i < items.size(); i++) {
            DrawerItem item = items.get(i);
            if (item.isChecked()) {
                item.setChecked(false);
                notifyItemChanged(i);
                break;
            }
        }

        newChecked.setChecked(true);
        notifyItemChanged(position);

        if (listener != null) {
            listener.onItemSelected(position);
        }
    }

    public void setListener(OnItemSelectedListener listener) {
        this.listener = listener;
    }

    static abstract class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        private DrawerAdapter adapter;

        public ViewHolder(View itemView) {
            super(itemView);
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            adapter.setSelected(getAdapterPosition());
        }
    }

    public interface OnItemSelectedListener {
        void onItemSelected(int position);
    }


}
@SuppressWarnings({“rawtypes”,“ConstantConditions”})
公共类DrawerDatapter扩展了RecyclerView.Adapter{
私人清单项目;
私人地图

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder>  {
    ;
    private RecyclerView parentRecycler;
    private List<Card> data;

    public CardAdapter(List<Card> data) {
        this.data = data;
    }

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

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

        return new ViewHolder(v);
    }

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

        Card card = data.get(position);
        holder.getAdapterPosition();
        Glide.with(holder.itemView.getContext())
                .asGif()
                .load(card.getCardIcon())


                .into(holder.gifImageView);
        holder.textView.setText(card.getCardName());


    }

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




    class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        private GifImageView gifImageView;
        private TextView textView;

        public ViewHolder(View itemView) {
            super(itemView);
            gifImageView = itemView.findViewById(R.id.card_gif);
            textView = itemView.findViewById(R.id.card_name);

            itemView.findViewById(R.id.container).setOnClickListener(this);
        }

        public void showText() {
            int parentHeight = ((View) gifImageView.getParent()).getHeight();
            float scale = (parentHeight - textView.getHeight()) / (float) gifImageView.getHeight();
            gifImageView.setPivotX(gifImageView.getWidth() * 0.5f);
            gifImageView.setPivotY(0);
            gifImageView.animate().scaleX(scale)
                    .withEndAction(new Runnable() {
                        @Override
                        public void run() {
                            textView.setVisibility(View.VISIBLE);
                          //  gifImageView.setColorFilter(Color.BLACK);
                        }
                    })
                    .scaleY(scale).setDuration(200)
                    .start();
        }

        public void hideText() {
            textView.setVisibility(View.INVISIBLE);
            gifImageView.animate().scaleX(1f).scaleY(1f)
                .setDuration(200)
                .start();
        }


        @Override
        public void onClick(View v) { parentRecycler.smoothScrollToPosition(getAdapterPosition());
          }


                   }
            }
        }