Я пытаюсь надуть 2 строки LinearLayout в свой пользовательский адаптер, когда это необходимо. Чтобы избежать того, что мой надутый LinearLayout будет обрезан по краю моего ListView, я хочу ограничить количество надутых изображений для каждой строки до 5.
BLOCKLAYOUT.XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</LinearLayout>
BlockAdapter.java
public BlockAdapter(Context context,List<Cscore> blocks, int pos) {
this.mContext = context;
this.blocks = blocks;
this.currentPosition = pos;
}
@Override
public int getItemCount() {
return 1;
}
@Override
public BlockAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.block_layout, parent, false));
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
if(blocks != null) {
holder.bind(blocks.get(currentPosition),null);
}
}
public class ViewHolder extends RecyclerView.ViewHolder {
private final List<ImageView> imageViews = new ArrayList<>();
private final ViewGroup container;
public ViewHolder(View v) {
super(v);
container = (ViewGroup) itemView;
}
public void bind(Cscore block) {
recycleImageViews();
if(block !=null) {
for (int i = 0; i < block.getMaxscore(); ++i) {
final ImageView imageView = getRecycledImageViewOrCreate();
Picasso.get().load(block.getImgurl()).into(imageView);
imageViews.add(imageView);
container.addView(imageView);
}
}
}
private ImageView getRecycledImageViewOrCreate() {
if (imageViewPool.isEmpty()) {
return (ImageView)LayoutInflater.from(container.getContext()).inflate(R.layout.imageView, container, false);
}
return imageViewPool.remove(0);
}
public void recycleImageViews() {
imageViewPool.addAll(imageViews);
imageViews.clear();
container.removeAllViews();
}
}
@Override
public void onViewRecycled(ViewHolder holder) {
super.onViewRecycled(holder);
holder.recycleImageViews();
}
}
Этот BlockAdapter только раздувает изображения и является дочерним по отношению к другому адаптеру, который отображает текст и другие материалы. Поэтому мой getItemCount () возвращает 1, потому что я хочу, чтобы только 1 RecyclerView отображался внутри родительского адаптера.
R.layout.imageView - это простой imageView:
<ImageView android:id="@+id/block"
android:layout_width="@dimen/icon_l"
android:layout_height="@dimen/icon_l" />
Iпопытался поработать над методом связывания:
public void bind(Cscore block) {
recycleImageViews();
if(block !=null) { ...}
imageViews.add(imageView);
container.addView(imageView);
}
там я должен накачать другую строку / строку LinearLayout с горизонтальной ориентацией при достижении 5-го элемента в моем ImagesList ... очевидно, продолжая с 6-м элементом, а не спервый