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

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

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

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

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

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

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

Полностью скроллируемая таблица - Программирование Android
На данный момент я пишу приложение для учителей и преподавателей и хотел бы, чтобы таблица с классами была полностью скроллируемой. То есть...

Полностью убить приложение - Программирование Android
Я в методе onBackPressed прописал Android. is. killProcess(android.os.Process.myPid()) и в итоге получаю при выходе из приложения захожу...

Картинка не заполняет полностью экран - Программирование Android
Есть метод который рисует в canvas protected void onDraw(Canvas canvas) { canvas.drawBitmap(fon, 0, 0, null);...

Полностью прозрачный status bar - Программирование Android
Как сделать прозрачный статус бар как на картинке: и чтобы изображение было под статус баром.

Не читается полностью скачанный xml - Программирование Android
Здравствуйте. Скачитаю xml: URL conn = new URL("http://www.cbr.ru/scripts/XML_daily.asp?date_req=05.10.2012"); InputSource...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
27.04.2015, 07:26     Список отображается не полностью #2
Приветствую.
В общем надо смотреть адаптер, ведь если пеердается 2 и более, то listview1 должен выводить не одну строчку.
korep
51 / 44 / 9
Регистрация: 06.01.2013
Сообщений: 595
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;
    }
}
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
27.04.2015, 13:30     Список отображается не полностью #4
Не нравится мне вот это:
Цитата Сообщение от korep Посмотреть сообщение
((ListView) view.findViewById(R.id.admin_ticket_good_list)).setAdapter(ticketPositionAdapter);
Т.е. при каждом создании итема в listview сетится адаптер для listview2.
Может убрать это после вызова TicketAdapter?

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

Добавлено через 3 минуты
.notifyDataSetChanged()?
korep
51 / 44 / 9
Регистрация: 06.01.2013
Сообщений: 595
27.04.2015, 15:03  [ТС]     Список отображается не полностью #5
Rube,
Цитата Сообщение от Rube Посмотреть сообщение
.notifyDataSetChanged()?
это куда писать? если не ошибаюсь оно отвечает за обновление отображения списка при условии, что мы добавляем новый элемент. Но массивы, которые я передаю они потом не меняются (статичны).
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
27.04.2015, 15:18     Список отображается не полностью #6
Это метод адаптера, ну да, обновляет показ.
а _ticket.getPositions() сколько данных содержит при вызове?
korep
51 / 44 / 9
Регистрация: 06.01.2013
Сообщений: 595
27.04.2015, 15:23  [ТС]     Список отображается не полностью #7
обычно два и более.

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

Добавлено через 36 секунд
ну да это итемы, но сами xml файлы может нужны
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
27.04.2015, 19:46     Список отображается не полностью #10
Цитата Сообщение от korep Посмотреть сообщение
ну да это итемы, но сами xml файлы может нужны
Ничего не понял, а admin_ticket_position это не xml файл чтоли?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2015, 00:01     Список отображается не полностью
Еще ссылки по теме:

Android Studio полностью круглая кнопка - Программирование Android
Здравствуйте. Я хочу сделать круглую кнопку где края не мешают кликать на другие объекты. У меня есть один activity с кодом: &lt;?xml...

AutoScrolls TextView. Текст выводится не полностью - Программирование Android
Нужно сделать текст, который в случае, если не влезает в экран начинает скролиться по кругу. В некоторых случаях работает, а в некоторых...

Как полностью убрать Action Bar? - Программирование Android
Добрый вечер ! Подскажите пожалуйста как полностью убрать Action Bar . Никак не получается , пробовал в манифесте менять ,вставлял вот это...

Как полностью удалить студию (убунту)? - Программирование Android
Как полностью удалить android studio 1.3.1 в ubuntu. Среда криво установилась. Можно ее как нибудь полностью удалить чтобы установить с...


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

Или воспользуйтесь поиском по форуму:
korep
51 / 44 / 9
Регистрация: 06.01.2013
Сообщений: 595
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
Это все конечно костыли, но без них в данном случае никак, если кто подскажет более простой метод, буду рад услышать.
Yandex
Объявления
28.04.2015, 00:01     Список отображается не полностью
Ответ Создать тему
Опции темы

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