Урок 43. Одиночный и множественный выбор в ListView

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

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение Foenix » 09 май 2013, 13:59

в точности как в уроке нужно сделать.
R.id.team

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

EvilAngel
Сообщения: 28
Зарегистрирован: 16 апр 2013, 23:55

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение EvilAngel » 02 июн 2013, 21:35

Захотел объединить обе части примера из урока.
[syntax=java]
...
public boolean onContextItemSelected(MenuItem item) {

ListView lv = (ListView)findViewById(R.id.lvMain);
int LayoutTemplate = 0, ItemId = item.getItemId();

if (ItemId == MY_MENU_SINGLE_CHOICE) {
lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
LayoutTemplate = android.R.layout.simple_list_item_single_choice;
}

else if (ItemId == MY_MENU_MULTIPLE_CHOICE) {
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
LayoutTemplate = android.R.layout.simple_list_item_multiple_choice;
}

lv.setAdapter(new ArrayAdapter<String>(this, LayoutTemplate,getResources().getStringArray(R.array.names)));
return super.onContextItemSelected(item);
}
...
[/syntax]

Но вот в строке
[syntax=java]lv.setAdapter(new ArrayAdapter<String>(this, LayoutTemplate,getResources().getStringArray(R.array.names)));[/syntax]
мне не нравится getResources().getStringArray(R.array.names). Можно ли изменить layout пунктов списка вообще без создания другого адаптера и затрагивания данных списка? И, как можно получить массив элементов списка без мануального перебора и не обращаясь к ранее созданному массиву строк?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение KamiSempai » 03 июн 2013, 15:20

Без создания кастомного адаптера тут не обойтись. Новому адаптеру нужно будет создать метод который будет заменять Id layout-а.
Только после этого стоит вызвать еще раз setAdapter. Иначе список будет продолжать переиспользовать старые вьюхи.

Но я не совсем уверен, что это сработает на всех версиях андроида. Поэтому лучше вначале установить адаптер в null, а потом заново поставить свой.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Snaiper
Сообщения: 4
Зарегистрирован: 04 июл 2013, 22:09

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение Snaiper » 04 июл 2013, 22:18

suicide писал(а):MainActivity не находит R.array.names, т.е. когда я добавляю этот массив в файл хранящий строки, R. файл почему-то не обновляется.
У кого бы такая проблема? Подскажите пожалуйста как решили?

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

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение klblk » 05 июл 2013, 04:47

Snaiper писал(а):
suicide писал(а):MainActivity не находит R.array.names, т.е. когда я добавляю этот массив в файл хранящий строки, R. файл почему-то не обновляется.
У кого бы такая проблема? Подскажите пожалуйста как решили?
Вероятно Project->Clean поможет. Еще вероятно что в xml файле ошибка.

Snaiper
Сообщения: 4
Зарегистрирован: 04 июл 2013, 22:09

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение Snaiper » 05 июл 2013, 11:35

klblk писал(а): Вероятно Project->Clean поможет. Еще вероятно что в xml файле ошибка.
Сделал Project->Clean, R-файл удалился. Как создать R-файл?

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

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение klblk » 05 июл 2013, 11:43

Snaiper писал(а):
klblk писал(а): Вероятно Project->Clean поможет. Еще вероятно что в xml файле ошибка.
Сделал Project->Clean, R-файл удалился. Как создать R-файл?
Он генерируется автоматически. Посмотрите внимательно xml файлы. Либо дайте нам на них посмотреть.

Snaiper
Сообщения: 4
Зарегистрирован: 04 июл 2013, 22:09

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение Snaiper » 05 июл 2013, 12:35

klblk писал(а):
Snaiper писал(а):
klblk писал(а): Вероятно Project->Clean поможет. Еще вероятно что в xml файле ошибка.
Сделал Project->Clean, R-файл удалился. Как создать R-файл?
Он генерируется автоматически. Посмотрите внимательно xml файлы. Либо дайте нам на них посмотреть.
main.xml

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	 xmlns:android="http://schemas.android.com/apk/res/android"
	 android:layout_width="fill_parent"
	 android:layout_height="fill_parent"
	 android:orientation="vertical">
	<Button
		 android:id="@+id/btnChecked"
		 android:layout_width="wrap_content"
		 android:layout_height="wrap_content"
		 android:text="Get checked items">
	</Button>
	<ListView
		 android:id="@+id/lvMain"
		 android:layout_width="match_parent"
		 android:layout_height="wrap_content">
	</ListView>
</LinearLayout>
strings.xml

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

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<string name="hello">Hello World, MainActivity!</string>
	<string name="app_name">SimpleListChoice</string>
	<string-array name="names">
		<item>Иван</item>
		<item>Марья</item>
		<item>Петр</item>
		<item>Антон</item>
		<item>Даша</item>
		<item>Борис</item>
		<item>Костя</item>
		<item>Игорь</item>
		<item>Анна</item>
		<item>Денис</item>
		<item>Вадим</item>
		<item>Ольга</item>
		<item>Сергей</item>
	</string-array>
</resources>


Snaiper
Сообщения: 4
Зарегистрирован: 04 июл 2013, 22:09

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение Snaiper » 05 июл 2013, 18:13

klblk писал(а):
Snaiper писал(а):
klblk писал(а): Вероятно Project->Clean поможет. Еще вероятно что в xml файле ошибка.
Сделал Project->Clean, R-файл удалился. Как создать R-файл?
Он генерируется автоматически. Посмотрите внимательно xml файлы. Либо дайте нам на них посмотреть.
Разобрался. Ошибка была в xml файле. Файлы main.xml и strings.xml проверил, а файлу menu.xml внимание не придал. Ошибка как раз в нем и была. В файле была ссылка на строковую переменную которой уже не существовала.

evgenius_b
Сообщения: 10
Зарегистрирован: 23 авг 2013, 13:26

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение evgenius_b » 29 авг 2013, 10:31

kaftanati писал(а):
SEEK писал(а): Поясните пожалуйста- в чем проблема то? у меня тоже никак не хочет...даже после clean-а...
Я нашел взаимосвязь - когда вставлял код в string.xml затирал параметр:

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

<string name="action_settings">Settings</string>
Когда вернул его на место все срослось :)
И у меня тоже срослось после добавления этой строки в strings.xml! Спасиба!
Но в тексте урока эта строка отсутствует. Интересно, почему так происходит?

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

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение aleksbim » 18 сен 2013, 22:42

А что такое keyAt(i) ?

tav
Сообщения: 14
Зарегистрирован: 23 авг 2013, 12:48

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение tav » 19 сен 2013, 12:57

public int keyAt (int index)
Added in API level 1
Given an index in the range 0...size()-1, returns the key from the indexth key-value mapping that this SparseBooleanArray stores.

Spinner
Сообщения: 9
Зарегистрирован: 26 сен 2013, 20:51

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение Spinner » 26 сен 2013, 20:55

Ребята, а как сохранять элементы ListView в самом приложении, может с помощью SharedPreferences, но не знаю как..?

gh-gh
Сообщения: 2
Зарегистрирован: 24 апр 2013, 17:16

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение gh-gh » 30 окт 2013, 11:17

в следующем уроке вы пишите
"OnItemSelectedListener – обрабатывает выделение пунктов списка (не check, как на прошлом уроке)"
Все это конечно вводит в заблуждение, но спасибо что пояснили это нюанс.
Но собственно какой листенер отвечает за выделение элемента списка(то есть выделение которое check), чтобы можно было обрабатывать выделение элемента(без нажатия кнопки как у вас в примере)?

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение trew » 30 окт 2013, 12:33

gh-gh писал(а):в следующем уроке вы пишите
"OnItemSelectedListener – обрабатывает выделение пунктов списка (не check, как на прошлом уроке)"
Все это конечно вводит в заблуждение, но спасибо что пояснили это нюанс.
Но собственно какой листенер отвечает за выделение элемента списка(то есть выделение которое check), чтобы можно было обрабатывать выделение элемента(без нажатия кнопки как у вас в примере)?
Наверно Вам нужен BaseAdapter.
Урок 54
http://startandroid.ru/ru/uroki/vse-uro ... apter.html
В классе class BoxAdapter
есть обработчик событий OnCheckedChangeListener
Log.d(TAG," --- OnCheckedChangeListener = " + buttonView.getTag().toString());
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

TittTitov
Сообщения: 27
Зарегистрирован: 20 ноя 2013, 22:46

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение TittTitov » 18 янв 2014, 14:16

Здравствуйте!

Разъясните, пожалуйста, что значат (и зачем нужны) эти строки в файле strings.xml:

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

<string name="hello">Hello World, MainActivity!</string>
<string name="app_name">SimpleListChoice</string>
Спасибо!

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

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение Foenix » 18 янв 2014, 14:25

это перечень строковых констант и их значений, находится в файле ресурсов. Делается для порядка и удобства. Когда тебе,, например, понадобится локализовать приложение - все в одном месте. Или допустим можно использовать 1 строку в нескольких кусках кода - тоже можно исправить в 1 месте и готово.
R.id.team

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

Log1c
Сообщения: 1
Зарегистрирован: 22 апр 2014, 17:39

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение Log1c » 22 апр 2014, 17:49

Fima777 писал(а):MainActivity не находит R.array.names , почему то подчёркивает array красной линией и пишет "array cannot be resolved or is not a field"

в чём тут проблема?
Похоже автор урока ошибся.

Я добавил в файл res/values/strings.xml
Еще такую строку в <resources>:
<string name="action_settings">Settings</string>

Т. е. файл res/values/strings.xml у меня получился такой:
[syntax=xml]<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, MainActivity!</string>
<string name="app_name">SimpleListChoice</string>
<string name="action_settings">Settings</string>
<string-array name="names">
<item>Иван</item>
<item>Марья</item>
<item>Петр</item>
<item>Антон</item>
<item>Даша</item>
<item>Борис</item>
<item>Костя</item>
<item>Игорь</item>
<item>Анна</item>
<item>Денис</item>
<item>Вадим</item>
<item>Ольга</item>
<item>Сергей</item>
</string-array>
</resources>[/syntax]

По крайней мере у меня заработало.

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

Re: Урок 43. Одиночный и множественный выбор в ListView

Сообщение klblk » 23 апр 2014, 06:10

Это не у автора ошибка, а у вас лишний кусок кода, который создается автоматически при создании проекта (res/menu/main.xml -> android:title="@string/action_settings"). Для данного урока меню вообще не нужно. Иногда(в идеале "всегда") нужно включать голову, а не просто копипастить. Да и к 43 уроку уже должно появиться видение структуры проекта и умение работать со строками.

Ответить