简体   繁体   English

对2个RecyclerView使用相同的RecyclerViewAdapter

[英]Use same RecyclerViewAdapter for 2 RecyclerView's

i'm having some issues on implementing 2 RecyclerView's to the same RecyclerViewAdapter actually in my main.class i have 2 RecyclerView's one work's properly and it's made of buttons that contain some strings and i have also another RecyclerView where i would be able to put the string data from the buttons onClick but i can't get how can i implement another RecyclerView to RecyclerViewAdapter i have yet the onClick method on buttons so i have just to get data from them and put them to the new RecyclerView but i don't know how to do it. 我在main.class实际上将2个RecyclerView's实现为同一RecyclerViewAdapter遇到了一些问题,我有2个RecyclerView's一个工作正常,它由包含一些字符串的按钮组成,我还有另一个RecyclerView ,可以在其中放置来自按钮 onClick字符串数据,但是我不知道如何将另一个RecyclerView实施到RecyclerViewAdapter但按钮上仍然有onClick方法,因此我只需要从按钮中获取数据并将它们放到新的RecyclerView但我不知道怎么做。

Any suggestion on how can i do? 关于我该怎么办的任何建议?

Here is the screenshot of my layout with two recyclerView's 这是我的布局的屏幕截图,其中包含两个recyclerView's

在此处输入图片说明

While here is the code from the RecyclerViewAdapter the second recyclerView to implement is called recyclerlist_item.xml and it contain 3 TextView's called "Desc,Qta,Imp" 这是来自RecyclerViewAdapter的代码,要实现的第二个recyclerView称为recyclerlist_item.xml,它包含3个TextView,称为“ Desc,Qta,Imp”

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {

    private ArrayList<Item> mArrayList;
    private OnItemClickListener mListener;

    public interface  OnItemClickListener{
        void onItemClick(int position);
    }

    public void setOnItemClickListener(OnItemClickListener listener){
        mListener = listener;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder{

        public TextView mTextView;

        public ViewHolder(View itemView, final OnItemClickListener listener) {
            super(itemView);
            mTextView = itemView.findViewById(R.id.ButtonName);


            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(listener != null){
                        int position = getAdapterPosition();
                        if(position != RecyclerView.NO_POSITION){
                            listener.onItemClick(position);
                        }
                    }
                }
            });

        }
    }


public static class ListHolder extends  RecyclerView.ViewHolder{

        public TextView desc;
        public TextView qta;
        public TextView imp;


    public ListHolder(View listView) {
        super(listView);

        desc = listView.findViewById(R.id.Desc);
        qta = listView.findViewById(R.id.Qta);
        imp = listView.findViewById(R.id.Imp);


    }


}

    public Adapter(ArrayList<Item> itemList){
            mArrayList = itemList;
    }

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

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
                Item currentItem = mArrayList.get(position);

                holder.mTextView.setText(currentItem.getBtnName());
    }

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

Let me get the question straight, you want any items clicked in the bottom RecyclerView to appear in the top one? 让我直接回答这个问题,您是否希望在底部RecyclerView中单击的任何项目都出现在顶部?

If so try something like this: 如果是这样,请尝试以下操作:

List<Item> selectedItemList = new ArrayList<>();

Adapter mAdapter = new Adapter(itemArrayList);
mAdapter.setOnItemClickListener( new OnItemClickListener(){

    @override
    void onItemClick(int position){
        Item item = itemArrayList.get(position);

        if( !selectedItemList.contains(item) ){
            selectedItemList.add( item );
            topAdapter.notifyItemInserted(selectedItemList.size() - 1);
        }
    }

});

In this example topAdapter is a new adapter you need to write and back with the selectedItemList List. 在此示例中, topAdapter是一个新适配器,您需要使用selectedItemList列表进行写操作并返回。 That adapter should use your ListHolder ViewHolder. 该适配器应使用您的ListHolder ViewHolder。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM