#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. Потому что это прототип, и в будущем будет много представлений, подобных первому.