2015-11-01 2 views
0

Я пытаюсь использовать библиотеку Picasso, чтобы загружать плакаты фильма из API TMDB в виде сетки с помощью AsyncTask, поэтому я использовал пользовательский адаптер, но ничего не происходит, поэтому я попытался загрузить одно твердокодированное изображение, но он не сделал Нагрузка тоже. Я поставил точку останова в методе getView моего пользовательского адаптера и заметил, что он никогда не срабатывает ... Итак, что я делаю неправильно здесь?Android, как использовать пикассо с GridView?

Это мой пользовательский адаптер:

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); 
      } 
     } 

Что я делаю неправильно здесь, что в моем режиме сетки нет изображений?

ответ

0

Я не знаю, является ли это наиболее оптимальным решением, но оно работает в моем случае. я просто удалил

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

из пользовательского адаптера, и это, вероятно, имел свой собственный getCount ...

0

Я предполагаю, что 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 mmethod. сделайте это ..

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(); 
     } 
    } 
+0

К сожалению, я случайно скопирована из другого проекта, это тот же самый код, но другое название. Я исправил его как правильное имя «mMoviesAdapter». Согласно документации, метод addAll по умолчанию вызывает «notifyDataSetChanged», если вы не укажете «mNotifyOnChange» как false. –

+0

работал ...? – RajeshVijayakumar

+0

Нет, я просто скопировал это неправильно в моем вопросе ... Я думаю, это потому, что метод getCount возвращает 0, но почему ??? –

Смежные вопросы