Вложенный переработчик вид внутри адаптера

Я занимаюсь разработкой приложения для Android, в котором я использовал вложенный RecyclerView, но я не достигаю того, чего хочу. Я хочу добиться, чтобы в этом списке отображалось название, а под несколькими изображениями, например, ниже, как json, как я могу добиться того, что я использую два видоискателя и это должно scrool также. структура JSON

ниже класс адаптера открытый класс UranAdapter расширяет RecyclerView.Adapter {

public List<Exhibit> exhibitList;
public Context context;

public UranAdapter(List<Exhibit> uranList, Context context) {
    this.exhibitList = uranList;
    this.context = context;

}

@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {


    View itemView;
    switch (viewType) {
        case Exhibit.TEXT_TYPE:
            itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.exhibit_list, parent, false);
            return new ViewHolder(itemView);
        case Exhibit.IMAGE_TYPE:
            itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.exhibit_list2, parent, false);
            return new ImageViewHolder(itemView);

    }
    return null;
}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {

}


@Override
public int getItemViewType(int position) {


    return exhibitList.get(position).type;
}

public int getItemCount() {
    return exhibitList.size();
}


public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    Exhibit exhibit = exhibitList.get(position);
    switch (exhibit.type) {

        case Exhibit.TEXT_TYPE:
            ((ViewHolder) holder).exhibition_textView.setText(exhibit.getTitle());

            break;


        case Exhibit.IMAGE_TYPE:
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                ((ViewHolder) holder).exhibition_imageView.setImageResource(exhibit.image);
            }


            break;

    }

}



public static class ViewHolder extends RecyclerView.ViewHolder {


    public ImageView exhibition_imageView;
    TextView exhibition_textView;

    public ViewHolder(View view) {
        super(view);
        exhibition_textView = (TextView) view.findViewById(R.id.exhibition_textview);


    }
}
    public static class ImageViewHolder extends RecyclerView.ViewHolder {


        public ImageView exhibition_imageView;
        TextView exhibition_textView;

        public ImageViewHolder(View view) {
            super(view);
            exhibition_imageView = (ImageView) view.findViewById(R.id.exhibition_imageview);


        }
    }
}

ниже MainActivity

открытый класс MainActivity расширяет AppCompatActivity {

public List<Exhibit> exhibitList = new ArrayList<>();
Context context;
RecyclerView recyclerView;


public UranAdapter uranAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ApiInterface apiInterface = ApiClient.getApiService();
    Call<ExhibitsLoader> call = apiInterface.getExhibitList();
    call.enqueue(new Callback<ExhibitsLoader>() {
        @Override
        public void onResponse(Call<ExhibitsLoader> call, Response<ExhibitsLoader> response) {
            exhibitList = response.body().getExhibitList();
            exhibitList.add(new Exhibit(Exhibit.IMAGE_TYPE));
            RecyclerView recyclerView = findViewById(R.id.recycler_view);
            recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
            uranAdapter = new UranAdapter(exhibitList, context); // changes
            recyclerView.setAdapter(uranAdapter);

        }

        @Override
        public void onFailure(Call<ExhibitsLoader> call, Throwable t) {

        }
    });


}

}

ниже изображение, что я хочу образ

4 ответа

Я думаю, что вам нужно здесь flatMap встроенный список изображений в одноуровневый список, и вы собираетесь правильно иметь два ViewHolder разных типов, один для заголовка, а другой для изображения. Не понимаю, почему ваш ViewHolders являются статическими.

Вы забыли позвонить notifyDatasetChanged() после настройки адаптера.

        uranAdapter = new UranAdapter(exhibitList, context); // changes
        recyclerView.setAdapter(uranAdapter);
        uranAdapter.notifyDatasetChanged();

Почему бы вам не использовать два RecyclerViews, один внутри другого?

Один RecyclerView будет иметь заголовок и дочерний RecyclerView. Второй RecyclerView(дочерний RecyclerView) будет иметь только изображения.

Проверьте это сообщение: Recyclerview внутри Recyclerview, получите позицию щелчка дочерней строки внутри родительского адаптера

Используйте расширяемый CardView для этого.. Как: https://www.youtube.com/watch?v=z9qScBaKfnM&t=727s

Другие вопросы по тегам