从RecyclerView中删除所有项目

时间:2015-04-30 22:10:54

标签: android adapter android-recyclerview

我正在尝试从我的RecyclerView方法中移除onRestart中的所有元素,以便项目不会被加载两次:

@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

14 个答案:

答案 0 :(得分:55)

避免在for循环中删除项目并在每次迭代中调用notifyDataSetChanged。而只需在列表myList.clear();中调用clear方法,然后通知适配器

public void clearData() {
    myList.clear(); // clear list
    mAdapter.notifyDataSetChanged(); // let your adapter know about the changes and reload view.
}

答案 1 :(得分:52)

这对我很有用:

public void clear() {
    int size = data.size();
    if (size > 0) {
        for (int i = 0; i < size; i++) {
            data.remove(0);
        }

        notifyItemRangeRemoved(0, size);
    }
}

来源: https://github.com/mikepenz/LollipopShowcase/blob/master/app/src/main/java/com/mikepenz/lollipopshowcase/adapter/ApplicationAdapter.java

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

答案 2 :(得分:15)

setAdapter(null);

如果RecycleView具有不同的视图类型

,则非常有用

答案 3 :(得分:13)

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

答案 4 :(得分:3)

这就是我清理Recyclerview并用动画添加新项目的方法:

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

答案 5 :(得分:3)

帮助自己:

public void clearAdapter() {
    arrayNull.clear();
    notifyDataSetChanged();
}

答案 6 :(得分:1)

我用这个。这实际上完全清除了 recylerview。我试过 adapter.notifyDataSetChanged(); 但它只是没有更新我的任何视图。当然,你已经先清除了名单。但是下面的代码工作正常并且完全清除了recyclerview的视图。

  listName.clear(); // clear list
                    
  adapter = new ModelAdaptor(Activity.this, listName);
  recyclerView.setAdapter(adapter);

答案 7 :(得分:0)

清除recycleview项目的另一种方法是实例化一个新的空适配器。

mRecyclerView.setAdapter(new MyAdapter(this, new ArrayList<MyDataSet>()));

它可能不是最优化的解决方案,但它的工作就像一个魅力。

答案 8 :(得分:0)

ListView使用clear()

但是,如果你只是为RecyclerView做这件事。首先,您必须使用RecyclerView.Adapter

清除notifyItemRangeRemoved(0,size)

然后,只有你recyclerView.removeAllViewsInLayout()

答案 9 :(得分:0)

private void clearRecyclerView() {
    CustomListViewValuesArr.clear();
    customRecyclerViewAdapter.notifyDataSetChanged();
}

使用此功能

答案 10 :(得分:0)

在Xamarin.Android上,它对我有用,并且需要更改布局

 var layout = recyclerView.GetLayoutManager() as GridLayoutManager;
 layout.SpanCount = GetItemPerRow(Context);
 recyclerView.SetAdapter(null);
 recyclerView.SetAdapter(adapter); //reset

答案 11 :(得分:0)

对于我来说,添加一个空列表可以完成这项工作。

List<Object> data = new ArrayList<>();
adapter.setData(data);
adapter.notifyDataSetChanged();

答案 12 :(得分:0)

您最好清除用于recyleview适配器的阵列列表。

arraylist.clear();

答案 13 :(得分:-3)

public void clearData() {
    mylist.removeAll(mylist);
    mAdapter.notifyDataSetChanged();
    recyclerView.setAdapter(mAdapter);
}