簡體   English   中英

ArrayAdapter 未使用 notifyDataSetChanged() 進行更新

[英]ArrayAdapter not updating with notifyDataSetChanged()

我有一個 ListView,我用 ArrayList 填充它工作正常,但是當我用新項目清除並重新填充 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM