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
...
我正在尝试使用 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
...