ListView的动态刷新问题——用notifyDataSetChanged没作用

今天在项目开发中遇到一个很奇怪的问题,给GridView设置了适配器,然后刷新数据的时候界面没有任何变化,好长时间没有想到为什么,最后在网上找到了答案,本来代码是这样写的。

  private GridView mMovie_gridview;
    private List<MovieInfo.MovieBean> mData;
    private MovieAdapter mMovieAdapter;
    private SimpleDraweeView mIv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Fresco.initialize(this);
        setContentView(R.layout.activity_main);
        mData = new ArrayList<>();
        mMovie_gridview = (GridView) findViewById(R.id.movie_gridview);
        mMovieAdapter = new MovieAdapter(this,mData,R.layout.movie_item_layout);
        mMovie_gridview.setAdapter(mMovieAdapter);

创建了一个List集合用来存放数据,然后在请求成功以后,给集合赋值,让adapter刷新

  @Override
            public void onResponse(Call<MovieInfo> call, Response<MovieInfo> response) {
                MovieInfo movieInfo = response.body();
                mData = movieInfo.results;
                mMovieAdapter.notifyDataSetChanged();
            }

后来才明白这样写是错的,因为原来我们使用的是最开始的集合作为数据源设置给了adapter,注意,此时集合中还是没有数据的,当我们访问网络成功以后,我们又把一个新的集合的引用赋值给了原来的集合,此时原来的集合的指向就变成了新的集合,但是我们的adapter的数据源还是原来的那个集合,内容是空的,所以我们刷新的时候没作用。
那莫应该怎么做呢?我们只要保证只有一个集合的引用存在就可以了,代码如下

   @Override
            public void onResponse(Call<MovieInfo> call, Response<MovieInfo> response) {
                MovieInfo movieInfo = response.body();
                mData.addAll(movieInfo.results);
                mMovieAdapter.notifyDataSetChanged();
            }

此时就可以刷新界面了,最后给大家上一张运行结果图
这里写图片描述

由于网络原因,部分图片未加载出来,不过我们的界面确实刷新了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值