С Новым годом! Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для korep
52 / 45 / 18
Регистрация: 06.01.2013
Сообщений: 626

Список отображается не полностью

27.04.2015, 01:31. Показов 1152. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
В общем есть listview в каждом item`е которого есть listview1
listview1 выводит только одну строчку, хотя в адаптер передается 2 и более.
Подскажите, как решить проблему отображения (мне надо, чтобы отображались все item`ы listview1
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.04.2015, 01:31
Ответы с готовыми решениями:

Почему TextView не отображается полностью?
TextView отображается неправильно, текст из 2 абзацев сливается в 1, также и с более длинными текстами, только они сливаются не в...

Не полностью отображается отчет
Здравствуйте есть отчет в FastReport. Проблема в том что если в MasterData1 нет данных то все что после в отчете не отображается, а если в...

Тема полностью не отображается
Привет всем! Установил wordpress на hostinger.ru , там стандартная тема была, поставил новую, новая отображается не до конца, подумал что...

10
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,082
27.04.2015, 07:26
Приветствую.
В общем надо смотреть адаптер, ведь если пеердается 2 и более, то listview1 должен выводить не одну строчку.
1
 Аватар для korep
52 / 45 / 18
Регистрация: 06.01.2013
Сообщений: 626
27.04.2015, 08:43  [ТС]
Rube, вот адаптер listview1:
Кликните здесь для просмотра всего текста
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
public class TicketPositionAdapter extends BaseAdapter {
 
    private Context context;
    private ArrayList<ticket_position> ticket_positions;
    private LayoutInflater layoutInflater;
 
    public TicketPositionAdapter(Context context, ArrayList<ticket_position> ticket_positions){
        this.context = context;
        this.ticket_positions = ticket_positions;
        this.layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
 
    @Override
    public int getCount(){
        return ticket_positions.size();
    }
 
    @Override
    public Object getItem(int position){
        return ticket_positions.get(position);
    }
 
    @Override
    public long getItemId(int position){
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        View view = convertView;
        if (view == null) {
            view = layoutInflater.inflate(R.layout.admin_ticket_position, parent, false);
        }
 
        ticket_position _ticket_position = (ticket_position) getItem(position);
        ((TextView) view.findViewById(R.id.admin_ticket_good_name)).setText(_ticket_position.getGood());
        ((TextView) view.findViewById(R.id.admin_ticket_good_cost)).setText(Float.toString(_ticket_position.getCost()) + " Лев");
        ((TextView) view.findViewById(R.id.admin_ticket_good_count)).setText(Integer.toString(_ticket_position.getCount()) + " шт.");
 
        return view;
    }
}


Добавлено через 1 минуту
а вот адаптер listview:
Кликните здесь для просмотра всего текста
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
public class TicketAdapter extends BaseAdapter {
 
    private Context context;
    private ArrayList<ticket> tickets;
    private LayoutInflater layoutInflater;
 
    public TicketAdapter(Context context, ArrayList<ticket> tickets){
        this.context = context;
        this.tickets = tickets;
        this.layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
 
    @Override
    public int getCount(){
        return tickets.size();
    }
 
    @Override
    public Object getItem(int position){
        return tickets.get(position);
    }
 
    @Override
    public long getItemId(int position){
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        View view = convertView;
        if (view == null) {
            view = layoutInflater.inflate(R.layout.ticket, parent, false);
        }
 
        ticket _ticket = (ticket) getItem(position);
 
        ((TextView) view.findViewById(R.id.admin_ticket_id)).setText(String.valueOf(_ticket.getId()));
        ((TextView) view.findViewById(R.id.admin_ticket_cashier_id)).setText(String.valueOf(_ticket.getCashier_id()));
        ((TextView) view.findViewById(R.id.admin_ticket_event_result)).setText(String.valueOf(_ticket.getEvent_result()));
        ((TextView) view.findViewById(R.id.admin_ticket_start_date)).setText(_ticket.getStart_date());
        ((TextView) view.findViewById(R.id.admin_ticket_time)).setText(String.valueOf(_ticket.getTime()));
        TicketPositionAdapter ticketPositionAdapter = new TicketPositionAdapter(this.context, _ticket.getPositions());
        ((ListView) view.findViewById(R.id.admin_ticket_good_list)).setAdapter(ticketPositionAdapter);
 
 
        return view;
    }
}
0
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,082
27.04.2015, 13:30
Не нравится мне вот это:
Цитата Сообщение от korep Посмотреть сообщение
((ListView) view.findViewById(R.id.admin_ticket_good _list)).setAdapter(ticketPositionAdapter );
Т.е. при каждом создании итема в listview сетится адаптер для listview2.
Может убрать это после вызова TicketAdapter?

Добавлено через 1 минуту
Хотя не, логично вроде.

Добавлено через 3 минуты
.notifyDataSetChanged()?
0
 Аватар для korep
52 / 45 / 18
Регистрация: 06.01.2013
Сообщений: 626
27.04.2015, 15:03  [ТС]
Rube,
Цитата Сообщение от Rube Посмотреть сообщение
.notifyDataSetChanged()?
это куда писать? если не ошибаюсь оно отвечает за обновление отображения списка при условии, что мы добавляем новый элемент. Но массивы, которые я передаю они потом не меняются (статичны).
0
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,082
27.04.2015, 15:18
Это метод адаптера, ну да, обновляет показ.
а _ticket.getPositions() сколько данных содержит при вызове?
0
 Аватар для korep
52 / 45 / 18
Регистрация: 06.01.2013
Сообщений: 626
27.04.2015, 15:23  [ТС]
обычно два и более.

Добавлено через 2 минуты
может xml item`ы нужны?
0
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,082
27.04.2015, 16:04
korep, а R.layout.admin_ticket_position это разве не итемы?
0
 Аватар для korep
52 / 45 / 18
Регистрация: 06.01.2013
Сообщений: 626
27.04.2015, 18:17  [ТС]
ну как бы описание то идет через xml разметку

Добавлено через 36 секунд
ну да это итемы, но сами xml файлы может нужны
0
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,082
27.04.2015, 19:46
Цитата Сообщение от korep Посмотреть сообщение
ну да это итемы, но сами xml файлы может нужны
Ничего не понял, а admin_ticket_position это не xml файл чтоли?
0
 Аватар для korep
52 / 45 / 18
Регистрация: 06.01.2013
Сообщений: 626
28.04.2015, 00:01  [ТС]
xml

Добавлено через 3 часа 32 минуты
В общем проблема решена.
На самом деле все нормально передается и почти хорошо работает.
В документации есть пункт о том, что не желательно использовать List`ы в List`ах (если кратко).
Т.е. ListView в ListView или ListView в ScrollView и т.д.
Это связано с тем, что все эти списки листающиеся. И возникает проблема их отображения. В данном случае единственным решением является изменение высоты внутреннего List`а после добавления новых записей.
Это можно сделать при помощи функции которую я позаимствовал здесь
Также ее можно теперь взять и здесь
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null)
        return;
 
    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.UNSPECIFIED);
    int totalHeight = 0;
    View view = null;
    for (int i = 0; i < listAdapter.getCount(); i++) {
        view = listAdapter.getView(i, view, listView);
        if (i == 0)
            view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, LayoutParams.WRAP_CONTENT));
 
        view.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
        totalHeight += view.getMeasuredHeight();
    }
    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
    listView.requestLayout();
}


Пояснение:
Во внутреннем адаптере создается listView и к нему применяется указанный выше метод.
Однако в результате мы получим, что к нашему внешнему listView будет добавляться каждый раз еще по одному списку.
для того, чтобы это избежать можно сделать вот так
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
if(view.findViewById(R.id.admin_ticket_good_listview) == null) {
            ListView listView = new ListView(context);
            listView.setId(R.id.admin_ticket_good_listview);
            listView.setAdapter(ticketPositionAdapter);
            ((LinearLayout) view.findViewById(R.id.admin_ticket_good_list)).addView(listView);
            ticketPositionAdapter.notifyDataSetChanged();
            setListViewHeightBasedOnChildren(listView);
        }

где R.id.admin_ticket_good_list - id LinearLayout`a в item`e внешнего listview
Это все конечно костыли, но без них в данном случае никак, если кто подскажет более простой метод, буду рад услышать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.04.2015, 00:01
Помогаю со студенческими работами здесь

RadioButton текст не полностью отображается?
Вроде бы очень простой вопрос но никак не получается решить его.Проблема такая что если текст занимает больше ширины чем указано в...

Почему эллипс отображается не полностью?
Добрый вечер, подскажите, почему матлаб изображает эллипс не полностью. grid on, hold on line(,, 'Color', 'black' ); % старая...

Не полностью отображается оперативная память
Ситуация такова на компе стоят 4 планки операивки, стоят так 1 слот 4 гб,2 слот, 2гб потом идёт слудущий канал, 4гб, 2 гб Итого 12 гб...

Шаблон Joomla! не отображается полностью!
Я совсем недавно начал изучать Joomla! и у меня небольшая проблема. Я скачал шаблон TX_Freemium установил, но он отображается на полностью,...

Рисунок не отображается полностью в OpenGL
Небольшая проблема возникла. Как бы я не игрался с размерами, все равно рисунок полностью на экране не отображается. Подскажите пожалуйста,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru