Как достать предметы из переработчика - PullRequest
0 голосов
/ 21 января 2020

У меня есть следующий класс (я передаю другой адаптер представления переработчика конструктору):

class BaseAdapter<T>(private var items: ArrayList<T?>, private val adapter: RecyclerView.Adapter<RecyclerView.ViewHolder>): RecyclerView.Adapter<RecyclerView.ViewHolder>()

Можно ли не передавать элементы напрямую и получать их из адаптера?

I я не хочу передавать элементы снова и хочу получить их от адаптера.

private var adapter: RecyclerViewAdapter? = null
adapter = RecyclerViewAdapter(items!!, applicationContext) // another adapter, can be any


recyclerView.layoutManager = layoutManager
recyclerView.adapter = BaseAdapter(items, adapter!!)

Как видите, я пропускаю элементы два раза, потому что мне нужно работать с ними в новом адаптере, например

 override fun showAd(firstVisibleItemPosition: Int) {
        if(isInsertionNeeded){
            items.add(firstVisibleItemPosition + 1, null)

            setVisibleItemPos(firstVisibleItemPosition + 1)

            notifyItemInserted(firstVisibleItemPosition+1)

            isInsertionNeeded = false
        }
    }

Ответы [ 2 ]

1 голос
/ 21 января 2020

Вам необходимо создать BaseRecyclerViewAdapter следующим образом: -

public abstract class BaseRecyclerViewAdapter<T> extends RecyclerView.Adapter implements AppConstants {

    public SmartArrayList<T> mArrayList;
    public Context mContext;
    private int margin;

    public BaseRecyclerViewAdapter(Context mContext) {
        this.mArrayList = new SmartArrayList<>();
        this.mContext = mContext;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(getView(), parent, false);
        return getViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int position) {
        if (mArrayList != null && mArrayList.size() > 0) {
            final T obj = mArrayList.get(holder.getAdapterPosition());
            setData(holder, obj, position);
        }
    }


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

    public abstract RecyclerView.ViewHolder getViewHolder(View view);

    public abstract int getView();

    public abstract void setData(RecyclerView.ViewHolder holder, T data, int position);

    public void addAll(ArrayList<T> mArrayList) {
        if (null != mArrayList) {
            this.mArrayList.addAll(mArrayList);
            notifyItemRangeInserted(getItemCount(), mArrayList.size());
        }
    }

    public void updateAll(ArrayList<T> mArrayList) {
        this.mArrayList = new SmartArrayList<>();
        this.mArrayList.addAll(mArrayList);
        notifyDataSetChanged();
//        notifyItemRangeInserted(getItemCount(), mArrayList.size());
    }

    public void clear() {
        this.mArrayList.clear();
        notifyDataSetChanged();
    }

    public void update(int position, T obj) {
        this.mArrayList.set(position, obj);
        notifyItemChanged(position);
    }

    public void remove(int position) {
        this.mArrayList.remove(position);
        notifyItemRemoved(position);
        notifyItemRangeChanged(position,mArrayList.size());
    }

    public void add(T obj) {
        int position = mArrayList.size();
        this.mArrayList.add(obj);
        notifyItemInserted(position);
    }

    public void add(int position, T obj) {
        this.mArrayList.add(obj);
        notifyItemInserted(position);
    }

    public SmartArrayList<T> getData() {
        return mArrayList;
    }
}

Используя ......

publi c класс YourAdapterName расширяет BaseRecyclerViewAdapter {

Ваш код ......

}

И вы легко получите данные.

1 голос
/ 21 января 2020
   public T getItem(int position) {
           return items.get(position);
         }

В адаптере RecyclerView Получить элемент списка с помощью адаптера RecyclerView getItem () Метод.

Отправить позицию и получить товар из списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...