Динамическое добавление представлений в элемент ListView не работает

#android #listview #android-listview

#Android #listview #android-listview

Вопрос:

У меня есть ListView , который всегда содержит два разных дочерних представления.

Теперь я хочу работать с первым (позиция == 0). Это раздутое представление, которое содержит ImageView и RelativeLayout (которое должно содержать маркеры).

После попытки добавить какое-либо представление к первому элементу RelativeLayout я увидел, что они были добавлены, но стали невидимыми. Метод RelativeLayout.getChildCount() возвращает правильное значение, но добавленный маркер не отображается.

Адаптер ListView:

  @Override
public View getView(int position, View view, ViewGroup parent) {
    switch (position) {
        case 0:
            view = (RelativeLayout) LayoutInflater.from(act).inflate(R.layout.item_choose_color_picture, parent, false);
            ((ImageView) ((RelativeLayout) view).findViewById(R.id.item_choose_color_image)).setImageBitmap(bitmap);
            return view;
        case 1:
            view = (ImageView) LayoutInflater.from(act).inflate(R.layout.item_choose_color_palette, parent, false);
            return view;
    }
            return view;
}
  

Макет первого элемента (item_choose_color_picture):

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >

    <ImageView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@ id/item_choose_color_image"
            />

    <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@ id/item_choose_color_abs"
            >

    </RelativeLayout>

</RelativeLayout>
  

MainActivity:

 itemRelative = (RelativeLayout) ((RelativeLayout) listView.getChildAt(0)).findViewById(R.id.item_choose_color_abs);
        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        layoutParams.topMargin = 20;
        layoutParams.leftMargin = 20;
        ImageView view = new ImageView(this);
        view.setImageDrawable(getResources().getDrawable(R.drawable.color_marker));
        view.setLayoutParams(layoutParams);
        itemRelative.addView(view, layoutParams);
  

Обновить

Когда я делаю то же самое с RelativeLayout из main_activity.xml все работает нормально. Все маркеры добавляются в нужные места.

Комментарии:

1. Я считаю fill_parent , что оно устарело, и вы должны использовать match_parent .

2. Но это не решает проблему

3. Я этого не ожидал: p вот почему я не опубликовал его в качестве ответа.

4. Если вы собираетесь создать другое представление для позиций 0 и 1, чем для остальной части списка, почему бы просто не добавить его в XML-файл над <ListView> ?

5. Потому что это прототип, и в будущем будет много представлений, подобных первому.