Урок 43. Одиночный и множественный выбор в ListView
Урок 43. Одиночный и множественный выбор в ListView
В этом уроке:
- используем список ListView для одиночного и множественного выбора элементов
Click here to read this article!
- используем список ListView для одиночного и множественного выбора элементов
Click here to read this article!
Последний раз редактировалось damager82 02 май 2017, 23:33, всего редактировалось 4 раза.
Re: Урок 43. Одиночный и множественный выбор в ListView
Здравствуйте.
Заметил такую штуку.
Компилятор постоянни ругался на слова и комментарии на Русском языке.
т.е. создать массив
String[] names = { "Иван", "Марья", "Петр", "Антон", "Даша", "Борис", "Костя", "Игорь", "Анна", "Денис", "Андрей" };
я не мог. при сохранении выдавалась ошибка:
"Save could not be completed. Try File > Save As... if the problem persists.
Reason:
Some characters cannot be mapped using "Cp1252" character encoding.
Either change the encoding or remove the characters which are not supported by the "Cp1252" character encoding."
Причина ясна нужно включить поддержку Русского языка. Подскажите где? )))
Самое интересное, что если хранить всё в файле ресурсов, то никаких ошибок не возникает и всё выводится на ура )
Заметил такую штуку.
Компилятор постоянни ругался на слова и комментарии на Русском языке.
т.е. создать массив
String[] names = { "Иван", "Марья", "Петр", "Антон", "Даша", "Борис", "Костя", "Игорь", "Анна", "Денис", "Андрей" };
я не мог. при сохранении выдавалась ошибка:
"Save could not be completed. Try File > Save As... if the problem persists.
Reason:
Some characters cannot be mapped using "Cp1252" character encoding.
Either change the encoding or remove the characters which are not supported by the "Cp1252" character encoding."
Причина ясна нужно включить поддержку Русского языка. Подскажите где? )))
Самое интересное, что если хранить всё в файле ресурсов, то никаких ошибок не возникает и всё выводится на ура )
Re: Урок 43. Одиночный и множественный выбор в ListView
какую версию андроида используешь? и пробывал ли на разных? я всегда тестирую на 2.3.3 и 4.0.3 то бывают разные ошибки.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 43. Одиночный и множественный выбор в ListView
сейчас использую 2.2
на самом деле, я просто прохожу уроки по порядку, дабы понять как всё тут устроено, поэтому не особо задумывался о версии.
мне почему-то показалось, что эту проблему можно решить парой галочек в настройках Eclipse.
хотя наверное вы правы, и дело в версии.
кстати. еще такой вопрос.
и
Разница в типе данных, который указывается в треугольных скобках, возникает из-за того, что один адаптер создается на основе нашего массива типа String,
а второй из файла ресурсов?
на самом деле, я просто прохожу уроки по порядку, дабы понять как всё тут устроено, поэтому не особо задумывался о версии.
мне почему-то показалось, что эту проблему можно решить парой галочек в настройках Eclipse.
хотя наверное вы правы, и дело в версии.
кстати. еще такой вопрос.
Код: Выделить всё
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, names);
Код: Выделить всё
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.names, android.R.layout.simple_list_item_single_choice);
а второй из файла ресурсов?
Re: Урок 43. Одиночный и множественный выбор в ListView
Метод ArrayAdapter.createFromResource на выходе дает ArrayAdapter<CharSequence>. Поэтому приходится так объявлять переменную.Alexei писал(а):Разница в типе данных, который указывается в треугольных скобках, возникает из-за того, что один адаптер создается на основе нашего массива типа String, а второй из файла ресурсов?
А когда сами создаем адаптер, просто используем знакомый всем String.
Хотя можно делать и так:
Код: Выделить всё
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_list_item_1, names);
А в массив names можно сложить String, т.к. String наследует интерфейс CharSequence и адаптер запросто будет с ним работать.
Re: Урок 43. Одиночный и множественный выбор в ListView
Привет.
Такая штука: урок 42, код
а урок 43, код
Вопрос - почему в одном случае создается НОВЫЙ объект класса адаптер, а в другом - просто приравнивается...? Для меня это вообще загадка, когда надо какой способ выбирать...Я больше на VB и VBA привык писать под эксель, там там запросто без всех этих NEW можно обойтись, а тут...попа полная )))
Еще вопрос - в этой же строке урока 43 - во второй половине не указывается тип <String> - почему? А в 42-м уроке - указан...
Такая штука: урок 42, код
Код: Выделить всё
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, names);
Код: Выделить всё
ArrayAdapter<CharSequence> adapter=ArrayAdapter.createFromResource(this, R.array.names, android.R.layout.simple_list_item_single_choice);
Еще вопрос - в этой же строке урока 43 - во второй половине не указывается тип <String> - почему? А в 42-м уроке - указан...
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 43. Одиночный и множественный выбор в ListView
В первом случае мы сами создаем адаптер, а во втором за нас это делает статичный метод createFromResource. Внутри него все тот-же new ArrayAdapter
Если заглянуть в документацию, то там сказано, что этот метод возвращает ArrayAdapter<CharSequence>, поэтому в уроке 43 так и написано.
В данной ситуации разницы между CharSequence и String почти ни какой.
Если заглянуть в документацию, то там сказано, что этот метод возвращает ArrayAdapter<CharSequence>, поэтому в уроке 43 так и написано.
В данной ситуации разницы между CharSequence и String почти ни какой.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 43. Одиночный и множественный выбор в ListView
А как узнать, когда какой способ использовать?KamiSempai писал(а):В первом случае мы сами создаем адаптер, а во втором за нас это делает статичный метод createFromResource. Внутри него все тот-же new ArrayAdapter
Если заглянуть в документацию, то там сказано, что этот метод возвращает ArrayAdapter<CharSequence>, поэтому в уроке 43 так и написано.
В данной ситуации разницы между CharSequence и String почти ни какой.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 43. Одиночный и множественный выбор в ListView
Зависит от ситуации. В уроке 43 массив хранится в ресурсах и если делать без этого метода, получится вот так:powercat писал(а):А как узнать, когда какой способ использовать?
Код: Выделить всё
CharSequence[] names = getResources().getTextArray(R.array.names);
ArrayAdapter<CharSequence> adapter=new ArrayAdapter<CharSequence>(this, android.R.layout.simple_list_item_1, names);
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 43. Одиночный и множественный выбор в ListView
А разве нельзя вот так написать, в явном виде указать names?KamiSempai писал(а):Зависит от ситуации. В уроке 43 массив хранится в ресурсах и если делать без этого метода, получится вот так:powercat писал(а):А как узнать, когда какой способ использовать?Зачем писать больше, если не видно разницы?Код: Выделить всё
CharSequence[] names = getResources().getTextArray(R.array.names); ArrayAdapter<CharSequence> adapter=new ArrayAdapter<CharSequence>(this, android.R.layout.simple_list_item_1, names);
Код: Выделить всё
ArrayAdapter<CharSequence> adapter=new ArrayAdapter<CharSequence>(this, android.R.layout.simple_list_item_1, getResources().getTextArray(R.array.names));
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 43. Одиночный и множественный выбор в ListView
В две строчки я для наглядности написал.
Так тоже можно. Но все-равно на 16 символов больше
Так тоже можно. Но все-равно на 16 символов больше
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 43. Одиночный и множественный выбор в ListView
MainActivity не находит R.array.names, т.е. когда я добавляю этот массив в файл хранящий строки, R. файл почему-то не обновляется.
Re: Урок 43. Одиночный и множественный выбор в ListView
Помогите с множественным выбором
Создаю Диалог таким способом
здесь же прописываю
lv_del_transl.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
чтобы ListView было присвоено свойство множественного выбора
Xml файл
в ListViev дописываю свойство
android:choiceMode="multipleChoice"
где R.layout.listofword_cmenu_del_transl_item
Ощущение, что SparseBooleanArray sbArray никакого эффекта не дает.
Т.е. при выборе нескольких CheckBox и нажатии Button получается, что игнорируется выбор CheckBox
Подскажите в чем ошибка?
Создаю Диалог таким способом
здесь же прописываю
lv_del_transl.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
чтобы ListView было присвоено свойство множественного выбора
Код: Выделить всё
final AlertDialog al_del_tr
AlertDialog.Builder Al_tr = new AlertDialog.Builder(this);
Al_tr.setTitle("Title");
RelativeLayout view_T = (RelativeLayout)getLayoutInflater().inflate(R.layout.listofword_cmenu_del_transl, null);
Al_tr.setView(view_T);
TextView del_transl = (TextView)view_T.findViewById(R.id.del_transl);
ListView lv_del_transl = (ListView)view_T.findViewById(R.id.lv_del_transl);
Button del_transl_OK = (Button)view_T.findViewById(R.id.del_transl_OK);
Button del_transl_Cancel = (Button)view_T.findViewById(R.id.del_transl_Cancel);
al_del_tr=Al_tr.create();
Del_transl.setText("word");
Cursor c_adap_tr=cur_del_tr(......);
startManagingCursor(c_adap_tr);
String[] from_r = new String[]{NAME};
int[] to_r = new int[] {R.id.transl };
scAdapter_transl = new SimpleCursorAdapter(this, R.layout.listofword_cmenu_del_transl_item, c_adap_tr, from_r, to_r);
lv_del_transl.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
lv_del_transl.setAdapter(scAdapter_transl);
del_transl_OK.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String sel="0";
SparseBooleanArray sbArray = lv_del_transl.getCheckedItemPositions();
for (int i = 0; i < lv_del_transl.getCount(); i++) {
int key = sbArray.keyAt(i);
if (sbArray.get(i))
sel+=Integer.toString(lv_del_transl.getCheckedItemPosition())+" ";
}
Toast.makeText(getApplicationContext(), Integer.toString(lv_del_transl.getCount())+" "+sel, Toast.LENGTH_SHORT).show();
}
});
....
al_del_rt.show();
в ListViev дописываю свойство
android:choiceMode="multipleChoice"
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="290dp"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<LinearLayout
android:id="@+id/lv_del_translation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="5dp" >
<TextView
android:id="@+id/del_translation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/text_del_translation"
android:textSize="20dp" />
<TextView
android:id="@+id/del_transl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="28dp"
android:text="@string/text_del_transl"
android:textSize="20dp" />
</LinearLayout>
<ListView
android:id="@+id/lv_del_transl"
android:layout_below="@+id/lv_del_translation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_weight="1"
android:choiceMode="multipleChoice"
/>
<LinearLayout
android:id="@+id/l_del_buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="center"
android:background="@drawable/gradient_box"
android:orientation="horizontal"
android:padding="5dp"
>
<Button
android:id="@+id/del_transl_OK"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/text_del_word_OK"
/>
<Button
android:id="@+id/del_transl_Cancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/text_del_word_Cancel"
/>
</LinearLayout>
</RelativeLayout>
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/transl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_centerVertical="true"
android:textSize="19sp">
</TextView>
<CheckBox
android:id="@+id/checbox_id"
android:layout_marginRight="10dp"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</RelativeLayout>
Т.е. при выборе нескольких CheckBox и нажатии Button получается, что игнорируется выбор CheckBox
Подскажите в чем ошибка?
Re: Урок 43. Одиночный и множественный выбор в ListView
Почему неправильно определяются индексы выделенных элементов.В LogСat получаю следующее
checked:
-1
-1
-1
в адаптере использовал ArrayList
checked:
-1
-1
-1
Код: Выделить всё
public void onClick(View arg0) {
// пишем в лог выделенные элементы
Log.d(LOG_TAG, "checked: ");
SparseBooleanArray sbArray = lvMain.getCheckedItemPositions();
for (int i = 0; i < sbArray.size(); i++) {
int key = sbArray.keyAt(i);
if (sbArray.get(key))
Log.d(LOG_TAG, String.valueOf(lvMain.getCheckedItemPosition()));
}
}
Код: Выделить всё
ArrayList<String> con=new ArrayList<String>();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_list_item_multiple_choice,con);
Re: Урок 43. Одиночный и множественный выбор в ListView
У вас множественный выбор?Dimatrof писал(а):Почему неправильно определяются индексы выделенных элементов.
Метод getCheckedItemPosition используется для получения индекса при одиночном выборе.
В уроке немного другой код, чем ваш:
вместо
lvMain.getCheckedItemPosition()
используется
names[key]
Re: Урок 43. Одиночный и множественный выбор в ListView
ок.спасибо, с этим разобрался.damager82 писал(а):У вас множественный выбор?Dimatrof писал(а):Почему неправильно определяются индексы выделенных элементов.
Метод getCheckedItemPosition используется для получения индекса при одиночном выборе.
В уроке немного другой код, чем ваш:
вместо
lvMain.getCheckedItemPosition()
используется
names[key]
Re: Урок 43. Одиночный и множественный выбор в ListView
MainActivity не находит R.array.names , почему то подчёркивает array крассной линией и пишет "array cannot be resolved or is not a field"
в чём тут проблема?
в чём тут проблема?
Re: Урок 43. Одиночный и множественный выбор в ListView
1) ошибка в синтаксисе; - проверьте array файл
2) Eclipse не обновил R.java; - сделайте clean проекту
3) импортирован не тот R.java файл
2) Eclipse не обновил R.java; - сделайте clean проекту
3) импортирован не тот R.java файл
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 43. Одиночный и множественный выбор в ListView
как сделать clean проекту? спасибо
Re: Урок 43. Одиночный и множественный выбор в ListView
Project - Clean
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена