微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ArrayAdapter 未使用 notifyDataSetChanged() 进行更新

如何解决ArrayAdapter 未使用 notifyDataSetChanged() 进行更新

我有一个用 ArrayList 填充的 ListView,它工作正常,但是当我用新项目清除并重新填充 ArrayList 并调用 notifyDataSetChanged() 时,永远不会调用适配器的 getView(),而不会调用 ListView反映新数据。不知道我哪里出错了,但任何帮助表示赞赏!谢谢

初始化视图和适配器

Arraylist<Movie> moviesArray = new Arraylist<>();
movieListView = view.findViewById(R.id.movie_list_view);
movielistadapter = new MovieListArrayAdapter(this,requireContext(),R.layout.list_item,moviesArray);
movieListView.setAdapter(movielistadapter);

调用新数据

moviesArray.clear()
moviesviewmodel.GetMovies();

观察结果(我的BottomSheet得到更新,所以我知道我正在接收数据)

moviesviewmodel.getMoviesResult().observe(getViewLifecycleOwner(),new Observer<MovieList>() {
        @Override
        public void onChanged(MovieList movieList) {
            if (movieList!=null) {
            moviesArray.addAll(movieList.getResults());
                    movielistadapter.notifyDataSetChanged();
            }
            UpdateBottomSheet(view,0);
        }
    });

适配器(更新列表数据时不调用getView)

public class MovieListArrayAdapter extends ArrayAdapter<Movie> {

Fragment fragment;
List<Movie> movies;

public MovieListArrayAdapter(Fragment fragment,@NonNull Context context,int resource,@NonNull List<Movie> movies) {
    super(context,resource,movies);
    this.fragment = fragment;
    this.movies = movies;
}

@NonNull
@Override
public View getView(int position,@Nullable View convertView,@NonNull ViewGroup parent) {
    Movie movie = movies.get(position);
    Movie top_movie = movies.get(0);

    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item,parent,false);
    }

    ImageView movie_imageview = convertView.findViewById(R.id.list_item_image);

    if (movie==top_movie) {
        convertView.setVisibility(View.VISIBLE);
        Glide.with(fragment.requireContext()).load(movie.getimage()).into(movie_imageview);
    } else {
        convertView.setVisibility(View.GONE);
    }

    return convertView;
}

解决方法

您需要更新适配器中的列表。

movieListAdapter.addAll(movieList.getResults());
movieListAdapter.notifyDataSetChanged();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。