Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
korep
52 / 45 / 18
Регистрация: 06.01.2013
Сообщений: 624
1

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

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

Здравствуйте.
В общем есть listview в каждом item`е которого есть listview1
listview1 выводит только одну строчку, хотя в адаптер передается 2 и более.
Подскажите, как решить проблему отображения (мне надо, чтобы отображались все item`ы listview1
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2015, 01:31
Ответы с готовыми решениями:

Не отображается список ListView
Имеется код: package com.example.mvideo.progeng; import android.net.Uri; import...

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

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

Меню html отображается не полностью
Пришлось сделать меню с помощью html на платформе (lpplatform) Вставил код через html-виджет,...

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

10
Rube
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,079
27.04.2015, 07:26 2
Приветствую.
В общем надо смотреть адаптер, ведь если пеердается 2 и более, то listview1 должен выводить не одну строчку.
1
korep
52 / 45 / 18
Регистрация: 06.01.2013
Сообщений: 624
27.04.2015, 08:43  [ТС] 3
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
Rube
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,079
27.04.2015, 13:30 4
Не нравится мне вот это:
Цитата Сообщение от korep Посмотреть сообщение
((ListView) view.findViewById(R.id.admin_ticket_good_list)).setAdapter(ticketPositionAdapter);
Т.е. при каждом создании итема в listview сетится адаптер для listview2.
Может убрать это после вызова TicketAdapter?

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

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

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

Добавлено через 36 секунд
ну да это итемы, но сами xml файлы может нужны
0
Rube
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,079
27.04.2015, 19:46 10
Цитата Сообщение от korep Посмотреть сообщение
ну да это итемы, но сами xml файлы может нужны
Ничего не понял, а admin_ticket_position это не xml файл чтоли?
0
korep
52 / 45 / 18
Регистрация: 06.01.2013
Сообщений: 624
28.04.2015, 00:01  [ТС] 11
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
28.04.2015, 00:01
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2015, 00:01

Не полностью отображается окно диалога
В общем все в теме..... LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam,...

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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