Как добавить горизонтальный 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);
}
}
}
Ответы
Ответ 1
По моему мнению, проблема возникает, когда система измеряет элемент списка.
Быстрое исправление заключалось в том, чтобы горизонтальная RecyclerView
была жестко закодированная высота, но поскольку это не очень хороший способ, я продолжил охоту и нашел другой способ.
Этот ответ был полезен, и я использовал размещенную там библиотеку.
Выполните следующие действия:
-
Импортируйте библиотеку, добавив ее в файл gradle:
compile 'org.solovyev.android.views:linear-layout-manager:[email protected]'
-
установите LayoutManager
, как показано ниже:
mRecyclerView.setLayoutManager(new org.solovyev.android.views.llm.LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));`
- убедитесь, что раздутый вид в горизонтальном
RecyclerView
равен RelativeLayout
, потому что другой LinearLayout
не поддерживает это.
- запустите свой проект и убедитесь в волшебстве!