Intereting Posts
HttpUrlConnection ведет себя по-разному в Android 2.3 Gingerbread Как установить параметры расположения RelativeLayout в коде не в xml Как я могу вызвать номер службы экстренной помощи Мягкий ввод Клавиатура перекрывается многострочным текстом редактирования на Android Как выполнить уведомление-действие (щелчок) на заблокированном экране? Найти ключевой хэш для подписанного приложения OnResume () не вызывается в SherlockFragment от SherlockFragmentActivity в Android? LoopJ AndroidAsyncHttp и запрашивать файлы cookie Обнаружить кнопку «Назад», но не отклонять диалоговое окно Android не может загружать библиотеку, когда в проекте lib есть и armeabi, и каталог armeabi-v7a в каталоге libs Как установить изображение как обои программно? Выполнение javascript в фоновом режиме с использованием телефонной заставки Android – LocationManager vs FusedLocation Комментарии пользователей не отображаются в Google Play Анализ недействительных амперсандов с помощью XmlPullParsers от Android

Как добавить горизонтальный RecyclerView в элемент списка

Задача реализации – создать бесконечный прокручиваемый список, который будет прокручиваться как по горизонтали, так и по вертикали.

Для этого я пытаюсь сделать так, что я RecyclerView горизонтальный RecyclerView внутри вертикального ListView . Правильно ли это? Я пробовал другие решения, но у прокрутки есть некоторые проблемы.

Проблема в том, что когда я пытаюсь реализовать RecyclerView внутри элемента списка, элементы не заполняются.

 public class HorizontalAdapter extends RecyclerView.Adapter<HorizontalAdapter.ViewHolder> { List<ImageMedia> imageMedia; protected Constants.IMAGE_SIZE image_size = Constants.IMAGE_SIZE.Small; private Context context; public HorizontalAdapter(Context context) { super(); setHasStableIds(true); this.context = context; } @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { return new ViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.horizontal_item, viewGroup, false)); } protected ImageMedia getItem(int position) { return imageMedia.get(position); } @Override public void onBindViewHolder(HorizontalAdapter.ViewHolder viewHolder, int i) { viewHolder.setMedia(getItem(i)); } @Override public int getItemCount() { return (imageMedia != null ? imageMedia.size() : 0); } @Override public void onViewRecycled(ViewHolder holder) { super.onViewRecycled(holder); } @Override public long getItemId(int position) { return imageMedia.get(position).getId(); } //Data gets updated here public void setMovies(List<Movie> movie) { if (movie != null) { imageMedia = (List<ImageMedia>) (List<?>) movie; } else { } notifyDataSetChanged(); } public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { ImageCardView imageView; ImageMedia imageMedia; public ViewHolder(View itemView) { super(itemView); imageView = (ImageCardView) itemView.findViewById(R.id.imageView); //TODO: remove this onclick itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Intent to go to the corresponding activity } }); } public void setMedia(ImageMedia imageMedia) { this.imageMedia = imageMedia; imageView.loadImage(imageMedia, image_size); } } } 

По моему мнению, проблема возникает, когда система измеряет элемент списка.

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

Этот ответ был полезен, и я использовал библиотеку, размещенную там.

Следуй этим шагам:

  1. Импортируйте библиотеку, добавив это в свой файл gradle:

     compile 'org.solovyev.android.views:linear-layout-manager:0.5@aar' 
  2. Установите LayoutManager как LayoutManager ниже:

     mRecyclerView.setLayoutManager(new org.solovyev.android.views.llm.LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));` 
  3. Убедитесь, что вид, завышенный в горизонтальном RecyclerView является RelativeLayout потому что другой LinearLayout не поддерживает это.
  4. Запустить свой проект и стать свидетелем волшебства!