Intereting Posts
Поместите объект в сообщение Обработчик Как включить мультисайдинг с новой библиотекой поддержки Android Multidex Свертывание панели инструментов и вложенного scrollview не прокручивается плавно Как предотвратить изменение пользовательских представлений из-за изменений ориентации экрана Как я могу предотвратить «убить» приложение или службу Android из диспетчера задач? Как открыть существующий проект андроида (build.gradle) в андроид-студии AndroidStudio – Зависимости модулей в Gradle ImageView: adjustViewBounds не работает с layout_height = "fill_parent"? Android: как выбрать текст из webview Отправьте ссылку на группу whatsapp непосредственно из браузера (или из приложения) Какова самая быстрая библиотека FFT для устройств iOS / Android ARM? Как добавить события календаря в Android? Выровнять ProgressBar горизонтально вверх (удалить промежуток) Предотвратить показ веб-страницы «веб-страница недоступна» Графические размеры для hdpi / ldpi / mdpi

Как добавить изображение в расширяемый список в parent в android?

Можно ли настроить дочерний объект в расширяемом списке?

Solutions Collecting From Web of "Как добавить изображение в расширяемый список в parent в android?"

Работа с SimpleExpandableListAdapter совсем не проста. Вот код, который должен вас запустить, предполагая, что вы используете ExpandableListActivity .

В этом примере мы используем стандартный android.R.layout.simple_expandable_list_item_1 для нашего представления заголовка группы, но мы используем собственный собственный макет для детей.

  // Construct Expandable List final String NAME = "name"; final String IMAGE = "image"; final LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); final ArrayList<HashMap<String, String>> headerData = new ArrayList<HashMap<String, String>>(); final HashMap<String, String> group1 = new HashMap<String, String>(); group1.put(NAME, "Group 1"); headerData.add( group1 ); final HashMap<String, String> group2 = new HashMap<String, String>(); group2.put(NAME, "Group 2"); headerData.add( group2); final ArrayList<ArrayList<HashMap<String, Object>>> childData = new ArrayList<ArrayList<HashMap<String, Object>>>(); final ArrayList<HashMap<String, Object>> group1data = new ArrayList<HashMap<String, Object>>(); childData.add(group1data); final ArrayList<HashMap<String, Object>> group2data = new ArrayList<HashMap<String, Object>>(); childData.add(group2data); // Set up some sample data in both groups for( int i=0; i<10; ++i) { final HashMap<String, Object> map = new HashMap<String,Object>(); map.put(NAME, "Child " + i ); map.put(IMAGE, getResources().getDrawable(R.drawable.icon)); ( i%2==0 ? group1data : group2data ).add(map); } setListAdapter( new SimpleExpandableListAdapter( this, headerData, android.R.layout.simple_expandable_list_item_1, new String[] { NAME }, // the name of the field data new int[] { android.R.id.text1 }, // the text field to populate with the field data childData, 0, null, new int[] {} ) { @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { final View v = super.getChildView(groupPosition, childPosition, isLastChild, convertView, parent); // Populate your custom view here ((TextView)v.findViewById(R.id.name)).setText( (String) ((Map<String,Object>)getChild(groupPosition, childPosition)).get(NAME) ); ((ImageView)v.findViewById(R.id.image)).setImageDrawable( (Drawable) ((Map<String,Object>)getChild(groupPosition, childPosition)).get(IMAGE) ); return v; } @Override public View newChildView(boolean isLastChild, ViewGroup parent) { return layoutInflater.inflate(R.layout.expandable_list_item_with_image, null, false); } } ); 

И внутри настраиваемого дочернего макета с именем expandable_list_item_with_image.xml :

 <?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="wrap_content"> <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" /> </RelativeLayout> 

Вы можете попробовать создать свой собственный адаптер списка, который расширяет BaseExpandableListAdapter. Пример: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.html

Затем переопределите функцию getGroupView (для родительского элемента или getChildView для дочернего элемента), и в этой функции вы можете раздуть свой собственный макет xml. Что-то вроде этого:

 public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { //sender is activity from where you call this adapter. Set it with construktor. LayoutInflater vi = (LayoutInflater)sender.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.row, null); } //children = arraylists of Child Child c = children.get(childPosition); if (c != null) { TextView tt = (TextView) v.findViewById(R.id.toptext); TextView bt = (TextView) v.findViewById(R.id.bottomtext); ImageView icon = (ImageView) v.findViewById(R.id.rowicon); if (tt != null) { tt.setText(c.text1); } if(bt != null){ bt.setText(c.text2); } if (icon != null) { icon.setImageResource(R.drawable.rowicon); } } return v; } 

Макет xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:padding="6dip"> <ImageView android:id="@+id/rowicon" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_marginRight="6dip" /> <LinearLayout android:orientation="vertical" android:layout_width="0dip" android:layout_weight="1" android:layout_height="fill_parent"> <TextView android:id="@+id/toptext" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:gravity="center_vertical" /> <TextView android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:id="@+id/bottomtext" android:singleLine="true" android:ellipsize="marquee" /> </LinearLayout> </LinearLayout> 

После переопределения getGroupView вы можете использовать функцию setCompoundDrawablesWithIntrinsicBounds для добавления изображения.

 @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View v = super.getGroupView(groupPosition, isExpanded, convertView, parent); TextView tv = (TextView) v.findViewById(R.id.textViewId); tv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.imageToAdd, 0, 0, 0); return v; } 

Я просто нашел лучший способ, вы можете просто добавить

android:drawableRight="@drawable/icon" строка в макет xml-файла группы списка.

Попробуйте >>> Учебник

И вы можете обновить его, чтобы добавить изображение вместо текста в дочерний xml-файл