使用相同的RecyclerViewAdapter for 2 RecyclerView' s

时间:2018-06-08 07:39:43

标签: android android-recyclerview

我在RecyclerView's实际上RecyclerViewAdapter实施2 main.class时遇到了一些问题,我有2 RecyclerView's个工作正常并且它由按钮组成,其中包含一些字符串,我还有另一个RecyclerView,我可以从按钮中输入字符串数据onClick但是我无法获得如何实现另一个RecyclerViewRecyclerViewAdapter我还有按钮上的onClick方法,所以我只需从中获取数据并把它们放到新的RecyclerView,但我不知道该怎么做。

有关我该怎么做的任何建议?

以下是我的布局与两个recyclerView's

的屏幕截图

enter image description here

虽然来自RecyclerViewAdapter的代码实现的第二个recyclerView称为recyclerlist_item.xml,但它包含3个TextView" Desc,Qta,Imp&#34 ;

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();
    }
}

2 个答案:

答案 0 :(得分:0)

让我直截了当地问一下,你想在底部的RecyclerView中点击的任何项目出现在最顶层吗?

如果有的话尝试这样的事情:

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);
        }
    }

});

在此示例中, topAdapter 是您需要使用 selectedItemList 列表编写和返回的新适配器。该适配器应使用 ListHolder ViewHolder。

答案 1 :(得分:0)

您可以简单地创建同一适配器的两个对象,并将不同的RecyclerView 传递给这两个对象。下面给出一个简单的例子

 output.merge(MyEnumCode.code, 1, Integer::sum); //-->outuput like EN1:3,ENS:1 (based on occurrencies)