我在onCreate方法中创建了一个带有空列表的recyclerview适配器。有必要这样做,因为在mAdapter上标记是一个滚动监听器,如果我向上滚动,我可以从数据库服务器获取另一个页面(为了简洁起见,我没有复制和粘贴该代码)。
public class MainActivity extends ActionBarActivity {
ArrayList<Post> totalPost = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
mAdapter = new MyAdapter(totalPost, mRecyclerView);
mRecyclerView.setAdapter(mAdapter); }
我在onResume中调用我的网络操作,onRreume在onCreate之后发生。
一旦我从网络运营中获得成功,我就会这样做,但没有任何反应:
totalPost = Lists.newArrayList(result.getPosts()); //saving the network results into an array
mAdapter.notifyDataSetChanged();
我也试过这个:
totalPost = Lists.newArrayList(result.getPosts()); //saving the network results into an array
mAdapter.notifyItemRangeChanged(0, totalPost.size());
我也试过这个并且它有效,但它并不理想。我在这里创建了一个新的适配器,我也失去了我的滚动监听器。我也不能在我的方法中引用我的滚动侦听器来引用我的网络操作,因为这将是“循环引用”&#39;:
totalPost = Lists.newArrayList(result.getPosts()); //saving the network results into an array
mAdapter = new MyAdapter(totalPost, mRecyclerView);
mRecyclerView.setAdapter(mAdapter);
为什么适配器不工作?
答案 0 :(得分:1)
我认为您的适配器不会接受新值。尝试创建在适配器类中定义的方法,并使用传入的新值调用该方法。如下所示:
totalPost = Lists.newArrayList(result.getPosts());
mAdapter.update(totalPost, mRecyclerView)
//适配器类
public void update(ArrayList<Post> totalP, RecyclerView recycler) {
totalPost = totalP;
mRecyclerView = recycler;
this.notifyDataSetChanged();
答案 1 :(得分:0)
您应该使用添加功能扩展您的适应器。 在您创建适配器并将其分配给recyclerview之后,您应该进行通信&#39;通过适配器的recyclerview。 将这样的内容添加到适配器中。 其中mItems是适配器中的内部后备阵列。
public void addAll(int location, Collection<T> items) {
mItems.addAll(location, items);
notifyItemRangeInserted(location, items.size());
}
public void add(T item, int position) {
mItems.add(position, item);
notifyItemInserted(position);
}