Recyclerview适配器使用空数组初始化,随后填充值

时间:2015-06-15 17:35:03

标签: android adapter android-recyclerview

我在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);

为什么适配器不工作?

2 个答案:

答案 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);
}