我从互联网上获取电影数据,如名称,海报等,但对于电影类型,我需要从网上再次获取它。所以这是我对这个问题的解决方案。从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()做同样的事情?不知道这种方法。 –