Примерная постановка задачи: отображение списка элементов внутри которого должно быть произвольное количество фотографий (например пост ВКонтакте).
Сначала сделал стандартно через BaseAdapter отображение одной фотографии.
item.xml
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tvDescr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text=""
android:textSize="20sp"></TextView>
<ImageView
android:id="@+id/ivImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></ImageView>
</LinearLayout>
Код: Выделить всё
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.item, parent, false);
}
Product p = getProduct(position);
((TextView) view.findViewById(R.id.tvDescr)).setText(p.name);
ImageView imageView = (ImageView) view.findViewById(R.id.ivImage);
imageView.setImageBitmap(p.bm);
return view;
}Вычитал, что если добавлять произвольное количество ImageView, то нужно это делать вручную.
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tvDescr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text=""
android:textSize="20sp"></TextView>
<LinearLayout
android:id="@+id/imageBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"></LinearLayout>
</LinearLayout>Код: Выделить всё
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.item_multi, parent, false);
}
Product p = getProduct(position);
((TextView) view.findViewById(R.id.tvDescr)).setText(p.name);
ImageView imageView = new ImageView(ctx);
imageView.setLayoutParams(new GridView.LayoutParams(105, 105));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
imageView.setImageBitmap(p.bm);
ViewGroup imageBox = (ViewGroup) view.findViewById(R.id.imageBox);
imageBox.addView(imageView);
return view;
}Переписываю так, что бы создавать ImageView только когда convertView == null:
Код: Выделить всё
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.item_multi, parent, false);
Product p = getProduct(position);
ImageView imageView = new ImageView(ctx);
imageView.setLayoutParams(new GridView.LayoutParams(220, 220));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
imageView.setImageBitmap(p.bm);
ViewGroup imageBox = (ViewGroup) view.findViewById(R.id.imageBox);
imageBox.addView(imageView);
}
return view;
}