Я пытаюсь завершить проект, который требует использования API tmdb и отображения результатов в RecyclerView.Проблема в том, что я могу запросить только фильмы или сериалы.Я не могу найти способ объединить оба в один RecyclerView.Ниже описан мой метод обработки запроса.
private void generateCall(Request request) {
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "failed");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
String jsonData = response.body().string();
if (response.isSuccessful()) {
adapter = new MovieAdapter(getMovieData(jsonData),SelectionActivity.this);
runOnUiThread(new Runnable() {
@Override
public void run() {
recyclerView.setLayoutManager(new LinearLayoutManager(SelectionActivity.this));
recyclerView.setAdapter(adapter);
}
});
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
Вот мой адаптер:
public class MovieAdapter extends RecyclerView.Adapter<MovieAdapter.ViewHolder> {
private static final String TAG = MovieAdapter.class.getSimpleName();
private List<Movie> movies;
private Context context;
public MovieAdapter(Context context) {
this.movies = new ArrayList<>();
this.context = context;
}
public MovieAdapter(List<Movie> movies, Context context) {
this.movies = movies;
this.context = context;
}
public List<Movie> getMovies() {
return movies;
}
public void setMovies(List<Movie> movies) {
this.movies.addAll(movies);
Log.d(TAG, this.movies.size() + "");
}
public void addMovies(List<Movie> movies) {
this.movies.addAll(movies);
Log.d(TAG, this.movies.size() + "");
}
@NonNull
@Override
public MovieAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.movie_list_item, viewGroup, false);
ViewHolder holder = new ViewHolder(view);
return holder;
/*
MovieListItemBinding binding = DataBindingUtil
.inflate(LayoutInflater.from(viewGroup.getContext()), R.layout.movie_list_item, viewGroup, false);
return new ViewHolder(binding);
*/
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
final Movie movie = movies.get(i);
// viewHolder.movieListItemBinding.setMovie(movie);
viewHolder.textView.setText(movie.getTitle());
viewHolder.textView2.setText(movie.getGenre());
viewHolder.textView3.setText(movie.getReleaseDate());
viewHolder.textView4.setText(movie.getRating());
Picasso.get().load(movie.getImagePath()).into(viewHolder.imageView);
viewHolder.parentLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(movie.getTitle());
builder.setMessage(movie.getOverview());
builder.setPositiveButton("OK", null);
builder.show();
}
});
}
@Override
public int getItemCount() {
return movies.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
// Binding variables
public MovieListItemBinding movieListItemBinding;
TextView textView;
TextView textView2;
TextView textView3;
TextView textView4;
ImageView imageView;
RelativeLayout parentLayout;
// Constructor to do view lookups for each subview
/*
public ViewHolder(MovieListItemBinding movieLayoutBinding) {
super(movieLayoutBinding.getRoot());
movieListItemBinding = movieLayoutBinding;
}
*/
public ViewHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
textView2 = itemView.findViewById(R.id.textView2);
textView3 = itemView.findViewById(R.id.textView3);
textView4 = itemView.findViewById(R.id.textView4);
imageView = itemView.findViewById(R.id.imageView);
parentLayout = itemView.findViewById(R.id.movieListView);
}
}
}
Я пытался создать отдельный список и использовать его.addAll () также.Любое понимание будет оценено!