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

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

Войти
Регистрация
Восстановить пароль
 
korep
52 / 45 / 9
Регистрация: 06.01.2013
Сообщений: 597
#1

Список отображается не полностью - Программирование Android

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

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

Не отображается список ListView - Программирование Android
Имеется код: package com.example.mvideo.progeng; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import...

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

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

Не полностью отображается выпадающее меню - HTML, CSS
Здравствуйте! Подскажите пожалуйста, почему не отображаются некоторые пункты выпадающего меню http://globus.cinet.ru/. Косяк в верстке,...

В Opera страница отображается не полностью - HTML, CSS
Пару вопросов по проблемам. Здавствуйте, дело такое, верстаю сайт. Делаю так что бы все работало адинаково на всех браузерах. Есть пара...

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

10
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
27.04.2015, 07:26 #2
Приветствую.
В общем надо смотреть адаптер, ведь если пеердается 2 и более, то listview1 должен выводить не одну строчку.
1
korep
52 / 45 / 9
Регистрация: 06.01.2013
Сообщений: 597
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
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
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
korep
52 / 45 / 9
Регистрация: 06.01.2013
Сообщений: 597
27.04.2015, 15:03  [ТС] #5
Rube,
Цитата Сообщение от Rube Посмотреть сообщение
.notifyDataSetChanged()?
это куда писать? если не ошибаюсь оно отвечает за обновление отображения списка при условии, что мы добавляем новый элемент. Но массивы, которые я передаю они потом не меняются (статичны).
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
27.04.2015, 15:18 #6
Это метод адаптера, ну да, обновляет показ.
а _ticket.getPositions() сколько данных содержит при вызове?
0
korep
52 / 45 / 9
Регистрация: 06.01.2013
Сообщений: 597
27.04.2015, 15:23  [ТС] #7
обычно два и более.

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

Добавлено через 36 секунд
ну да это итемы, но сами xml файлы может нужны
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
27.04.2015, 19:46 #10
Цитата Сообщение от korep Посмотреть сообщение
ну да это итемы, но сами xml файлы может нужны
Ничего не понял, а admin_ticket_position это не xml файл чтоли?
0
korep
52 / 45 / 9
Регистрация: 06.01.2013
Сообщений: 597
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2015, 00:01
Привет! Вот еще темы с ответами:

не полностью отображается шаблон Joomla - Joomla
Здравствуйте. Я на форуме впервые, в программинге тоже сравнительно недавно ) Вопрос вот какой. Я создала шаблон для Joomla с помощью...

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

Не полностью отображается окно диалога - C++ WinAPI
В общем все в теме..... LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId,...

Сайт на сотовых и на планшетах отображается не полностью - HTML, CSS
Здравствуйте! Сайт на сотовых и на планшетах отображается не полностью, вот так^ На компьютере на экранах 1280 отображается...


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

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

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