OkHttp отображает 2 запроса в одном RecyclerView - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь завершить проект, который требует использования 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 () также.Любое понимание будет оценено!

...