Урок 42. Список - ListView

Обсуждение уроков
Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 42. Список - ListView

Сообщение klblk » 05 ноя 2014, 05:47

llexa писал(а):Танцы с бубном при изучении к сожалению не отменить. Три дня пришлось потратить для изучения этого урока, даже не на изучения а на выяснения, что вызывает ошибки и только сейчас под вечер получилось. Так вот выяснилось, хоть запереписывайся и постоянно сохраняй, ошибки порой не исчезают а только добавляютса- но перезагрузка" Эклипс" творит чудеса...
Следущий этап:- подскажите где посмотреть как сделать переход из списка на активити.

PS/ Если не трудно могли бы вы на основании именно этого списка показать/обьяснить как это реализовывается?!!
уроки 28 и 44

Аватара пользователя
vitaliy
Сообщения: 44
Зарегистрирован: 10 янв 2015, 14:28
Откуда: Украина

Re: Урок 42. Список - ListView

Сообщение vitaliy » 14 янв 2015, 04:38

А откуда берется полоска внизу каждого TextView, где она и что это? Какая - то 9.png?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
Donald E. Knuth.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 42. Список - ListView

Сообщение klblk » 14 янв 2015, 08:26

Это относится не к TextView, а к самому ListView. Разделитель, в данном случае по умолчанию, можно установить свой методом setDivider. Вроде так, если я правильно вопрос понял.

Аватара пользователя
vitaliy
Сообщения: 44
Зарегистрирован: 10 янв 2015, 14:28
Откуда: Украина

Re: Урок 42. Список - ListView

Сообщение vitaliy » 14 янв 2015, 10:35

Да спасибо. Полезу внутрь посмотрю что она изсебя представляет.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
Donald E. Knuth.

Аватара пользователя
lisensei
Сообщения: 5
Зарегистрирован: 27 окт 2014, 12:15

Re: Урок 42. Список - ListView

Сообщение lisensei » 23 янв 2015, 17:37

Здравствуйте. Как я понял ListView можно присвоить только один адаптер, подскажите как можно реализовать экран подобного вида?
http://cs623618.vk.me/v623618530/1b1cf/fItK64dHfkk.jpg
Я к тому не создавать же мне кучу ListView со своими адаптерами и кучу обработчиков к ним.. Может выходом будет ScrollView.. ?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 42. Список - ListView

Сообщение klblk » 26 янв 2015, 07:22

ScrollView в данном случае будет нормальным выходом.

Аватара пользователя
Stashevckiy
Сообщения: 3
Зарегистрирован: 10 окт 2014, 11:22

Re: Урок 42. Список - ListView

Сообщение Stashevckiy » 26 янв 2015, 10:45

Ребята, нужна ваша консультация. Есть ListView, который содержит собственный лаяут айтэма. Айтем содержит в себе элементы Button и Text. По нажатию на выше указанную кнопку(не на элемент списка!) происходит добаление нового айтэма в список( т.е., кнопка имеет свой отдельный обработчик нажатия). А проблема, с которой я столкнулся, вот в чем: после добаления очередного пункта в список, все выше лежащие айтемы должны неким образом изменить свое состояние, а именно должна измениться иконка кнопки в каждом элементе списка, расположенного над последним элементом.

Обобщив все выше изложеное, вопрос приобретает такой вид: как можно получить доступ к реальным View - которые содержаться в лаяуте элемента списка для последующего взаимодействия с ними( изменения, обновления и т.д ). Каков вообще правильный механизм нужно использовать в android для осуществления выше указанных действий?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 42. Список - ListView

Сообщение Foenix » 26 янв 2015, 13:28

правильный механизм - работа с данными. Меняй данные, поменяется список.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Stashevckiy
Сообщения: 3
Зарегистрирован: 10 окт 2014, 11:22

Re: Урок 42. Список - ListView

Сообщение Stashevckiy » 26 янв 2015, 16:56

Foenix писал(а):правильный механизм - работа с данными. Меняй данные, поменяется список.
Пошел по данному пути - все ОК! Спасибо!

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 42. Список - ListView

Сообщение Foenix » 26 янв 2015, 21:14

приятно общаться с умными и понятливыми!
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 42. Список - ListView

Сообщение doter.ua » 27 янв 2015, 00:25

Foenix писал(а):приятно общаться с умными и понятливыми!
Странно, я вроде не отписывался в этой теме.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

svirfneblyn
Сообщения: 1
Зарегистрирован: 25 янв 2015, 20:12

Re: Урок 42. Список - ListView

Сообщение svirfneblyn » 27 янв 2015, 12:25

Добрый день! Подскажите как правильно написать адаптор.

У меня есть уже готовая БД, откуда я для ListView буру данные. Но я как то криво беру и в лист ложатся ссылки на записи в бд, а не сами записи.
результат вывода листвью :
Изображение

listActivity формируется так :

Код: Выделить всё

 //some code 
private List<Movies> movieses;
    private QuotesDataSource qDataSource;
//some code
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.quotes_list_iew);
          Log.d(TAG, "after open");
         (this.qDataSource= new QuotesDataSource((Context)this)).open();
           movieses = this.qDataSource.getAllMovies();
           this.setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, this.movieses));
//some code



Код: Выделить всё

dataSource :
public class QuotesDataSource {
   //some code
    private String[] allMoviesColumns;
    private SQLiteDatabase database;
    private DbHelper dbHelper;
    private String TAG;
    public QuotesDataSource(final Context context) {
        super();
       
        this.allMoviesColumns = new String[] { "_id", "name" };
        this.dbHelper = new DbHelper(context);
    }
// тут беру все записи из таблицы :

 public List<Movies> getAllMovies() {
        final ArrayList<Movies> list = new ArrayList<Movies>();
        final Cursor query = this.database.query("movies", this.allMoviesColumns, (String)null, (String[])null, (String)null, (String)null, (String)null);
        query.moveToFirst();
        while (!query.isAfterLast()) {
            list.add(this.cursorToMovie(query));
            query.moveToNext();
        }
        query.close();
        return list;
    }
сам адаптор :

Код: Выделить всё

public class QuotesAdapter extends BaseAdapter {
    private final Context context;
    private ArrayList<Movies> objects;
    LayoutInflater lInflater;
public QuotesAdapter (Context context, ArrayList<Movies> objects){
    super();
    this.context = context;
    this.objects = objects;
    lInflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
    @Override
    public int getCount() {
        return this.objects.size();
    }

    @Override
    public Object getItem(int position) {
        return  this.objects.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 = lInflater.inflate(R.layout.quotes_list_iew, parent, false);
        }
        final Movies quote = this.objects.get(position);

        final TextView textView = new TextView(this.context);
    //     view.findViewById(R.id.quotesListView).setText(quote.getName().toString()); 
       
        return (View)textView;
    }
}
При попытке расширить ListActivity - ругается на то, что layout файл должен содержать стандартный android id =list.
Или правильнее будет расширяться от обычного Activity ?

aleksbim
Сообщения: 81
Зарегистрирован: 02 фев 2013, 02:52

Re: Урок 42. Список - ListView

Сообщение aleksbim » 05 фев 2015, 15:51

Помогите пжл разобраться
smoothScrollToPosition() исправно прокручивает на android 2.1 и 2.3, но бездействует на android 4.1 и 4.3

Petrik
Сообщения: 18
Зарегистрирован: 12 фев 2015, 18:10

Re: Урок 42. Список - ListView

Сообщение Petrik » 22 фев 2015, 10:14

1. Можно ли, что б при нажатии (нажал - отпустил, не зажимал) на пункт списка, менялся его фон, причём на разные пункты списка, разный фон?
(Пожалуйста, если не затруднит напишите с кодом и куда его прописывать. Весь день сижу, не могу разобраться, вроде как то через адаптер можно? Уроки пересматривал, но так и не понял).

Научился "разукрашивать" весь список, а как же всё таки проделывать такое с отдельными пунктами?

2. Можно ли сделать так, что бы одни пункты списка были TextView, а другие Button?

3. Я так понял для одного ListView нужно создавать одно Activity, а можно, что б в одном Activity при нажатии на разные кнопки на экран выводились разные ListView?

4. Сколько пунктов может максимально содержать ListView и будет ли это как то влиять на производительность?

Rikie
Сообщения: 2
Зарегистрирован: 29 мар 2015, 13:38

Re: Урок 42. Список - ListView

Сообщение Rikie » 29 мар 2015, 14:00

Всем привет! Подскажите пожалуйста, что происходит с элементами списка которых не видно? Если элементов списка будет 1000, адаптер будет после создания хранить их всех в памяти, или созданные элементы после прокрутки будут удаляться?

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 42. Список - ListView

Сообщение doter.ua » 29 мар 2015, 14:05

Rikie писал(а):Всем привет! Подскажите пожалуйста, что происходит с элементами списка которых не видно? Если элементов списка будет 1000, адаптер будет после создания хранить их всех в памяти, или созданные элементы после прокрутки будут удаляться?
Будет заменяться контент. Текст вью как создался так и будет жить, а стринги из item будут подставляться новые.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Rikie
Сообщения: 2
Зарегистрирован: 29 мар 2015, 13:38

Re: Урок 42. Список - ListView

Сообщение Rikie » 29 мар 2015, 14:07

doter.ua писал(а): Будет заменяться контент. Текст вью как создался так и будет жить, а стринги из item будут подставляться новые.
Спасибо! Теперь все стало на свои места)

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 42. Список - ListView

Сообщение Foenix » 29 мар 2015, 17:36

http://stackoverflow.com/questions/1591 ... it-handled
вот тут на картинке описано что происходит.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

pro2on
Сообщения: 2
Зарегистрирован: 03 апр 2015, 09:56

Re: Урок 42. Список - ListView

Сообщение pro2on » 03 апр 2015, 10:24

Добрый день, подскажите, пожалуйста, в какую сторону копать.

Заткнулся на реализации экрана : есть записи в базе данных - учет событий и объема выпитой воды. Если вытаскивать их в ListView, то будет что-то такого вида:

2015-03-30 10:00 вода 300 мл
2015-03-30 11:00 чай 200 мл
2015-03-30 11:30 чай 350 мл
2015-04-01 09:00 сок 200 мл

Это все получается. Есть база. Есть asynctaskloader. Есть cursoradapter.

Хотелось бы получить список с суммой каждого дня, например:

2015-03-30 всего:1050 мл.
10:00 вода 300 мл
11:00 чай 200 мл
11:30 чай 350 мл

2015-04-01 всего:200л.
09:00 сок 200 мл

И тут мозг сломался. Это реализуется в ListView или нет? Если да, то можно предположить, вытягивать из базы данные, суммировать их, формировать arralist и подсовывать его ArrayListAdapter. А в getview делать таблицу и напихивать ее конкретными значениями. Но тогда элементы ListView будут разного размера... И как тогда реализовывать onitemclicklestener на каждом элементе, что бы изменить данные?
Последний раз редактировалось pro2on 03 апр 2015, 14:06, всего редактировалось 1 раз.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 42. Список - ListView

Сообщение Foenix » 03 апр 2015, 13:45

Делаешь так. Формируй курсор запросом (это самое важное, никаких подсчетов и перегонок в массивы) так, чтоб в нем еще были нужные колонки с суммами, т.е суммы фактически будут повторяться для каждой группы в твоем курсоре. Обязательно отсортируй записи.
Сформируй xml строки состоящее из 2 строк - основная, и суммирование под ней. Те два лэйаута. Сделай 1 видимым, а второму gone.
Затем в адаптере в методе getview проверяй следующее значение суммы в курсоре за текущей строкой. Если след. Сумма уже разнится, значит пошла следующая группа. Тогда при переходе ты делаешь 2му лэйауту с суммами visible. Иначе gone.
Таким образом можно формировать и заголовки 'подгрупп'
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить