RecyclerView
メソッドのonRestart
からすべての要素を削除しようとしているので、アイテムが2回ロードされません。
@Override
protected void onRestart() {
super.onRestart();
// first clear the recycler view so items are not populated twice
for (int i = 0; i < recyclerAdapter.getSize(); i++) {
recyclerAdapter.delete(i);
}
// then reload the data
PostCall doPostCall = new PostCall(); // my AsyncTask...
doPostCall.execute();
}
しかし、何らかの理由で、delete
で作成したadapter
メソッドが正しく機能していません。
recyclerAdapter.Javaで:
public void delete(int position){
myList.remove(position);
notifyItemRemoved(position);
}
public int getSize(){
return myList.size();
}
リスト全体ではなく、リスト内の他のすべてのアイテムが削除されると思います。
listview
を使用すると、とても簡単で、単にadapter.clear()
と呼びました。
誰かがコードを修正するのを手伝ってくれますか?
notifyItemRangeRemoved(...,...);
を使用する必要があると思いますが、どのようにすればよいかわかりません。 TIA
public void clear() {
int size = data.size();
if (size > 0) {
for (int i = 0; i < size; i++) {
data.remove(0);
}
notifyItemRangeRemoved(0, size);
}
}
public void clear() {
int size = data.size();
data.clear();
notifyItemRangeRemoved(0, size);
}
@Override
protected void onRestart() {
super.onRestart();
// first clear the recycler view so items are not populated twice
recyclerAdapter.clear();
// then reload the data
PostCall doPostCall = new PostCall(); // my AsyncTask...
doPostCall.execute();
}
Forループでアイテムを削除したり、繰り返しごとにnotifyDataSetChangedを呼び出したりしないでください。代わりに、リストのmyList.clear();
のclearメソッドを呼び出してから、アダプターに通知します
public void clearData() {
myList.clear(); // clear list
mAdapter.notifyDataSetChanged(); // let your adapter know about the changes and reload view.
}
setAdapter(null);
RecycleViewに異なるビュータイプがある場合に便利です
recyclerView.removeAllViewsInLayout();
上記の行は、レイアウトからすべてのビューを削除するのに役立ちます。
あなたのために:
@Override
protected void onRestart() {
super.onRestart();
recyclerView.removeAllViewsInLayout(); //removes all the views
//then reload the data
PostCall doPostCall = new PostCall(); //my AsyncTask...
doPostCall.execute();
}
これは私がリサイクラビューをクリアし、アニメーションで新しいアイテムを追加した方法です:
mList.clear();
mAdapter.notifyDataSetChanged();
mSwipeRefreshLayout.setRefreshing(false);
//reset adapter with empty array list (it did the trick animation)
mAdapter = new MyAdapter(context, mList);
recyclerView.setAdapter(mAdapter);
mList.addAll(newList);
mAdapter.notifyDataSetChanged();
自分自身を助ける:
public void clearAdapter() {
arrayNull.clear();
notifyDataSetChanged();
}
ListView
はclear()
を使用します。
しかし、あなたがRecyclerView
のためにそれをしているだけなら。まず、notifyItemRangeRemoved(0,size)
でRecyclerView.Adapter
をクリアする必要があります
次に、あなただけrecyclerView.removeAllViewsInLayout()
。
private void clearRecyclerView() {
CustomListViewValuesArr.clear();
customRecyclerViewAdapter.notifyDataSetChanged();
}
この機能を使用
Xamarin.Androidでは、私にとってはうまく機能し、レイアウトを変更する必要があります
var layout = recyclerView.GetLayoutManager() as GridLayoutManager;
layout.SpanCount = GetItemPerRow(Context);
recyclerView.SetAdapter(null);
recyclerView.SetAdapter(adapter); //reset
私の場合、空のリストを追加することでうまくいきました。
List<Object> data = new ArrayList<>();
adapter.setData(data);
adapter.notifyDataSetChanged();
Recycleviewアイテムをクリアする別の方法は、新しい空のアダプターをインスタンス化することです。
mRecyclerView.setAdapter(new MyAdapter(this, new ArrayList<MyDataSet>()));
それはおそらく最も最適化されたソリューションではありませんが、魅力のように機能しています。