Android 如何在 GridView 中使用 picasso?

Android how to use picasso with GridView?

我正在尝试使用 Picasso 库,以便使用 AsyncTask 将电影海报从 TMDB API 加载到网格视图中,因此我使用了自定义适配器,但没有任何反应,所以我尝试加载一个单个硬编码图像,但它也没有加载。我在我的自定义适配器的 "getView" 方法中放置了一个断点,并注意到它永远不会触发...... 那么,我在这里做错了什么?

这是我的自定义适配器:

public class MoviesAdapter extends ArrayAdapter<MovieEntity> {
    private Context context;
    private List<MovieEntity> movies = new ArrayList<>();

    public MoviesAdapter(Context context, int resource, int textViewResourceId, List<MovieEntity> objects) {
        super(context, resource, textViewResourceId, objects);
        this.context = context;
    }

    @Override
    public int getCount() {
        return movies.size();
    }

    @Override
    public MovieEntity getItem(int position) {
        return movies.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView view = (ImageView) convertView;
        if (view == null) {
            view = new ImageView(context);
            view.setScaleType(ImageView.ScaleType.CENTER_CROP);
        }

        MovieEntity movieEntity = getItem(position);

        Picasso.with(context)
                .load(movieEntity.moviePoster)
                .placeholder(R.drawable.placeholder)
                .error(R.drawable.error)
                .fit()
                .tag(context)
                .into(view);

        return view;
    }
}

这是我在 "onCreateView" 方法中的代码:

mMoviesAdapter = new MoviesAdapter(getActivity(),
                R.layout.grid_view_image_item,
                R.id.img_movie_poster,
                new ArrayList<MovieEntity>());

        GridView gridView = (GridView) rootVoew.findViewById(R.id.grid_movies);
        gridView.setAdapter(mMoviesAdapter);

AsyncTask onPostExecute 方法中的数据设置如下:

protected void onPostExecute(String[] strings) {
            if (strings != null) {
                mMoviesAdapter.clear();
                mMoviesAdapter.addAll(strings);
            }
        }

我做错了什么,我的网格视图中没有图像?

我假设 mForecastList 是数组列表,而您的 mMoviesAdapter 作为您的 mForecastList 的适配器。

在你的 onCreateView

  mForecastList = new ArrayList<MovieEntity>();
  mMoviesAdapter = new MoviesAdapter(getActivity(),
            R.layout.grid_view_image_item,
            R.id.img_movie_poster, mForecastList);

    GridView gridView = (GridView) rootVoew.findViewById(R.id.grid_movies);
    gridView.setAdapter(mMoviesAdapter);

在你的 postExecute mm 方法中。这样做..

  protected void onPostExecute(String[] strings) {
        if (strings != null) {
            if(mForecastList != null) {
              mForecastList.clear();
            }
            // If `strings` is json data parse it to ArrayList<MovieEntity>
        //    mForecastList.addAll(stringsList);
            // Call notifyDataSetChanged() to refresh the data in the grid..
            mMoviesAdapter.notifyDataSetChanged();
        }
    }

我不知道这是否是最佳解决方案,但它适用于我的情况。 我刚刚删除了

@Override
public int getCount() {
    return movies.size();
}

来自自定义适配器,它可能有自己的 getCount...