亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何更新回收視圖適配器數據?

如何更新回收視圖適配器數據?

海綿寶寶撒 2019-07-05 10:18:51
如何更新回收視圖適配器數據?試圖找出更新的問題所在RecyclerView是適配器。在我得到一份新的產品清單之后,我試著:更新ArrayList從碎片recyclerView,將新數據設置為適配器,然后調用adapter.notifyDataSetChanged()沒有用。像其他人一樣,創建一個新適配器,它對他們起了作用,但對我來說沒有變化:recyclerView.setAdapter(new RecyclerViewAdapter(newArrayList))創建一個方法Adapter它更新數據如下:public void updateData(ArrayList<ViewModel> viewModels) {    items.clear();    items.addAll(viewModels);    notifyDataSetChanged();}然后,每當我想更新數據列表時,我都會調用這個方法;它沒有工作。若要檢查是否可以任何方式修改“回收視圖”,并且嘗試刪除至少一個項目: public void removeItem(int position) {     items.remove(position);     notifyItemRemoved(position);}一切都保持原樣。這是我的適配器:public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> implements View.OnClickListener {     private ArrayList<ViewModel> items;     private OnItemClickListener onItemClickListener;     public RecyclerViewAdapter(ArrayList<ViewModel> items) {         this.items = items;     }     public void setOnItemClickListener(OnItemClickListener onItemClickListener) {         this.onItemClickListener = onItemClickListener;     }     @Override     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {         View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycler, parent, false);         v.setOnClickListener(this);         return new ViewHolder(v);     }     public void updateData(ArrayList<ViewModel> viewModels) {         items.clear();         items.addAll(viewModels);         notifyDataSetChanged();     }     public void addItem(int position, ViewModel viewModel) {         items.add(position, viewModel);         notifyItemInserted(position);     }     public void removeItem(int position) {         items.remove(position);         notifyItemRemoved(position);     }因此,如何實際更新適配器數據以顯示新接收的項?
查看完整描述

3 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

我使用的是回收視圖,刪除和更新都很好。

1)刪除:從回收視圖中刪除項目有4個步驟

list.remove(position);recycler.removeViewAt(position);mAdapter.notifyItemRemoved(position);                 
mAdapter.notifyItemRangeChanged(position, list.size());

這些密碼對我有用。

2)更新數據:我唯一需要做的就是

mAdapter.notifyDataSetChanged();

所有這些都必須在actvity/片段代碼中完成,而不是在ReccyclerView Adapter代碼中。


查看完整回答
反對 回復 2019-07-05
?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

這就是對我有用的東西:

recyclerView.setAdapter(new RecyclerViewAdapter(newList));recyclerView.invalidate();

在創建了一個包含更新列表的新適配器(在我的例子中,它是一個轉換為ArrayList的數據庫)并將其設置為適配器之后,我嘗試了recyclerView.invalidate()而且成功了。


查看完整回答
反對 回復 2019-07-05
  • 3 回答
  • 0 關注
  • 462 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號