Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
q0o0p
1 / 1 / 0
Регистрация: 19.03.2014
Сообщений: 22
#1

Свой layout в качестве параметра адаптера SimpleExpandableListAdapter - Программирование Android

04.02.2016, 15:51. Просмотров 362. Ответов 3
Метки нет (Все метки)

Добрый день! При изучении андроида в одном из примеров захотелось заменить стандартный элемент на собственный.
Вот неизмененный код урока, который работает:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package com.example.anya.lesson45expandablelist;
 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ExpandableListView;
import android.widget.SimpleExpandableListAdapter;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
 
public class MainActivity extends AppCompatActivity
{
    String[] groups = new String[] {"HTC", "Samsung", "LG"};
    String[] phonesHTC = new String[] {"Sensation", "Desire", "Wildfire", "Hero"};
    String[] phonesSams = new String[] {"Galaxy S II", "Galaxy Nexus", "Wave"};
    String[] phonesLG = new String[] {"Optimus", "Optimus Link", "Optimus Black", "Optimus One"};
    // коллекция для групп
    ArrayList<Map<String, String>> groupData;
    // коллекция для элементов одной группы
    ArrayList<Map<String, String>> childDataItem;
    // общая коллекция для коллекций элементов
    ArrayList<ArrayList<Map<String, String>>> childData;
    // в итоге получится childData = ArrayList<childDataItem>
    // список аттрибутов группы или элемента
    Map<String, String> m;
    ExpandableListView elvMain;
 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        groupData = new ArrayList<Map<String, String>>();
        for (String group : groups) {
            m = new HashMap<String, String>();
            m.put("groupName", group);
            groupData.add(m);
        }
 
        String groupFrom[] = new String[] {"groupName"};
        int groupTo[] = new int [] {android.R.id.text1};
 
        childData = new ArrayList<ArrayList<Map<String, String>>>();
        childDataItem = new ArrayList<Map<String, String>>();
        for (String phone : phonesHTC) {
            m = new HashMap<String, String>();
            m.put("phoneName", phone);
            childDataItem.add(m);
        }
        childData.add(childDataItem);
 
        childDataItem = new ArrayList<Map<String, String>>();
        for (String phone : phonesSams) {
            m = new HashMap<String, String>();
            m.put("phoneName", phone);
            childDataItem.add(m);
        }
        childData.add(childDataItem);
 
        childDataItem = new ArrayList<Map<String, String>>();
        for (String phone : phonesLG) {
            m = new HashMap<String, String>();
            m.put("phoneName", phone);
            childDataItem.add(m);
        }
        childData.add(childDataItem);
 
        String childFrom[] = new String[] {"phoneName"};
        int childTo[] = new int [] {android.R.id.text1};
        SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(
                this,
                groupData,
                android.R.layout.simple_expandable_list_item_1,
                groupFrom,
                groupTo,
                childData,
                android.R.layout.simple_list_item_1,
                childFrom,
                childTo);
        elvMain = (ExpandableListView) findViewById(R.id.elvMain);
        elvMain.setAdapter(adapter);
    }
}
Вот код разметки main.xml

XML
1
2
3
4
5
6
7
8
9
10
11
12
<?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= "fill_parent"
    android:orientation= "vertical" >
    <ExpandableListView
        android:id= "@+id/elvMain"
        android:layout_width= "match_parent"
        android:layout_height= "wrap_content" >
    </ExpandableListView>
</LinearLayout>
И я хочу заменить android.R.layout.simple_list_item_1 в конструкторе адаптера на свой, другой элемент. То есть, вместо android.R.layout.simple_list_item_1 я пишу R.layout.child_template, чтоб текст потомков был красный.
Вот xml код моего элемента:
XML
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8"?>
 
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@string/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:textColor="#FFFF2222"
    android:minHeight="?android:attr/listPreferredItemHeightSmall" />
Текст действительно становится красным [если у этого элемента в xml коде задать какой-то текст]. Но текстовые значения из childFrom теперь не привязываются. И текст пустой. В чем может быть моя ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2016, 15:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Свой layout в качестве параметра адаптера SimpleExpandableListAdapter (Программирование Android):

Динамически создать layout для адаптера - Программирование Android
Может кто подскажет, как динамически создать layout для адаптера? Задача заполнять таблицу данными из БД. Думаю удобно было-бы...

Подключить к ListView свой layout - Программирование Android
Нужно сделать список со своей разметкой элементов (simple_list_item_2, но с переключателем). Сделал свой файл с разметкой, но компилятор не...

Как каждому табу в ActionBar прикрепить свой layout, свою activity - Программирование Android
Всех с наступающим!!!! Меня уже третий день терзает ActionBar!!!! Точнее его табы!!! Вот есть в андроиде обычные табы, там все ясно....

SimpleExpandableListAdapter - Программирование Android
Доброго времени суток! Подскажите, как можно заменить данные из SimpleExpandableListAdapter по аналогии с ViewBinder? Если есть, то...

Поясните как this передает самого себя в качестве параметра - Программирование Android
Здравствуйте, никак не могу сообразить что и куда передает this. Вот например в этом коде создан объект типа Button, а потом вызывается...

Как в getExtra использовать стринговую переменную в качестве параметра? - Программирование Android
Имею: Button button1 = (Button)findViewById(R.id.buttonone); button1.setOnClickListener(new OnClickListener() { ...

3
Mikalai
256 / 232 / 94
Регистрация: 11.01.2015
Сообщений: 656
04.02.2016, 16:54 #2
Попробуй заменить
Java
1
int childTo[] = new int [] {android.R.id.text1};
на
Java
1
int childTo[] = new int [] {R.id.childTextView};
и задай ИД в разметке

XML
1
2
3
4
вместо
android:id="@string/text1"
напиши 
android:id="@+id/childTextView"
2
q0o0p
1 / 1 / 0
Регистрация: 19.03.2014
Сообщений: 22
05.02.2016, 00:07  [ТС] #3
Спасибо!
0
anatoll
0 / 0 / 0
Регистрация: 29.12.2015
Сообщений: 12
25.10.2016, 05:52 #4
Всем добра.
Подскажите, как реализовать данный элемент внутри Fragment? Google не подсказал(

Добавлено через 10 часов 39 минут
Нашел подсказку на свой вопрос. Все получилось. Вдруг кому-то пригодится: http://dayz3.ru/watch/Yikx61n3oxE/an...rchfilter.html
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2016, 05:52
Привет! Вот еще темы с ответами:

Анимированный дизайн смены Layout или просто выдвигаемый layout - Программирование Android
Ну, думаю тут и так всё понятно. Я просто не знаю, какие ключевые слова вводить в гугл, всё что попадается это Drawer А мне нужнен просто...

At android.widget.LinearLayout.setChildFrame Layout в Layout-те - Программирование Android
Нужен совет бывалых. У меня есть активити которое запускается с мейн активити, на нем лежит Layout (горизонтальный) в котором 2й...

Не хочет работать в layout, но включается в layout-land - Программирование Android
доброе утро ! пишу первое приложение. обычный мейн.хмель выглядит вот так : &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;LinearLayout...

Добавить layout на layout - Программирование Android
Нашёл такой код: layout.add(view); только не понимаю куда его писать. Нужно чтобы один layout можно было использовать в нескольких других. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
25.10.2016, 05:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru