[英]How to get items from recycler view adapter
我有一個以下類(我將另一個回收器視圖適配器傳遞給構造函數):
class BaseAdapter<T>(private var items: ArrayList<T?>, private val adapter: RecyclerView.Adapter<RecyclerView.ViewHolder>): RecyclerView.Adapter<RecyclerView.ViewHolder>()
是否可以不直接傳遞項目並從適配器獲取它們?
我不想再次傳遞項目並希望從適配器中獲取它們。
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
}
}
您必須像這樣創建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;
}
}
使用......
公共類 YourAdapterName 擴展 BaseRecyclerViewAdapter{
你的代碼......
}
而且你很容易得到數據。
public T getItem(int position) {
return items.get(position);
}
在 RecyclerView Adapter 中使用 RecyclerView Adapter getItem()方法獲取列表項。
發送位置並從列表中獲取項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.