我從互聯網上獲取電影數據,如名稱,海報等,但對於電影類型,我需要從網上再次獲取它。所以這是我對這個問題的解決方案。從RecyclerView.Adapter加載互聯網數據
public class MoviesViewAllAdapter extends RecyclerView.Adapter<MoviesViewAllAdapter.MoviesViewHolder> {
private Context mContext;
private List<MovieBrief> mMovies;
public MoviesViewAllAdapter(Context context, List<MovieBrief> movies) {
mContext = context;
mMovies = movies;
}
@Override
public MoviesViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new MoviesViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_movie_large,parent,false));
}
@Override
public void onBindViewHolder(MoviesViewHolder holder, int position) {
holder.movieGenreTextView.setText("");
setGenres(holder, mMovies.get(position).getId());
}
@Override
public int getItemCount() {
return mMovies.size();
}
public class MoviesViewHolder extends RecyclerView.ViewHolder {
public TextView movieGenreTextView;
public MoviesViewHolder(View itemView) {
super(itemView);
movieGenreTextView = (TextView) itemView.findViewById(R.id.text_view_genre_movie_card);
}
}
private void setGenres(final MoviesViewHolder holder, Integer movieId) {
ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);
Call<Movie> call = apiService.getMovieDetails(movieId,mContext.getResources().getString(R.string.MOVIE_DB_API_KEY));
call.enqueue(new Callback<Movie>() {
@Override
public void onResponse(Call<Movie> call, Response<Movie> response) {
if(response.code() != 200) return;
List<Genre> genresList = response.body().getGenres();
String genres = "";
for (int i=0;i<genresList.size();i++) {
if(i == genresList.size()-1) {
genres = genres.concat(genresList.get(i).getGenreName());
}
else {
genres = genres.concat(genresList.get(i).getGenreName()+", ");
}
}
holder.movieGenreTextView.setText(genres);
}
@Override
public void onFailure(Call<Movie> call, Throwable t) {
}
});
}
}
但這裏的問題是,執行一扔,並去了recyclerview其顯示風格是不相關的電影的時候,這是載入類型是隨機的。 可能是因爲我正在將數據加載到onBindViewHolder上,當持有者從屏幕上消失時,它會加載到隨機的持有者中。是這樣嗎 ?
你不應該在那裏打電話。你無法控制被調用的次數。一個接一個地取回電影列表後去做,除非可以立即要求幾個。 –
另外,你想使用'if(!response.isSuccessful())return;'而不是代碼。 –
@MatiasOlocco我通過檢查其代碼200. 是response.isSuccessful()做同樣的事情?不知道這種方法。 –