Страница 1 из 8
Урок 44. События в ListView
Добавлено: 22 дек 2011, 03:00
damager82
В этом уроке:
- рассматриваем события ListView: нажатие - onItemClick, выделение - onItemSelect, прокрутка - onScroll
Click here to read this article!
Re: Урок 44. События в ListView
Добавлено: 22 мар 2012, 21:20
boriakaif
Наконец-то открыли регистрацию
Делаю по вашему уроку, хочу по нажатию на элементы списка, открывать следующие страницы, естественно, то что написано ниже даже говнокодом не назовешь)
каким способом лучше реализовать это?
я читал, что для отдельной страницы нужно отдельное активити, и т.д. но если можно хотелось бы пример кода, как это сделать для одного элемента списка, а дальше я уж как нибудь сам) на андроиде новичек, как и в java.(
Код: Выделить всё
lvMain.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
switch ((int)id) {
case 0:
setContentView(R.layout.test_layout);
break;
case 1:
setContentView(R.layout.test_layout2);
break;
}
p.s.
На Вашем сайте самые исчерпывающие уроки! Спасибо, за то что вы делаете
Re: Урок 44. События в ListView
Добавлено: 23 мар 2012, 11:34
KamiSempai
boriakaif писал(а):...если можно хотелось бы пример кода, как это сделать...
Вся нужная Вам информация находится в уроках 21 - 25.
Re: Урок 44. События в ListView
Добавлено: 23 мар 2012, 14:05
boriakaif
а вот именно сам выбор, какую активити стоит запустить - такой подход, (switch-case конструкция в обработчике нажатия на список) это нормально?
можно ли просто по id выбирать?
Re: Урок 44. События в ListView
Добавлено: 23 мар 2012, 16:44
KamiSempai
Даже и не знаю как ответить. Все зависит от ситуации.
Я правильно понял? Под id подразумевается R.layout.test_layout или R.layout.test_layout2? По id (экрана) можно будет выбрать если есть какая либо связь между строкой списка и этим id . Тут такой связи нет, и единственным нормальным решением будет switch-case.
К чему стоит придраться - это прямое указание позиции выбранного элемента. В Java принято использовать идентификаторы (например, такие как "LOG_TAG" из этого урока).
PS: На самом деле, я сам в Java новичок, поэтому мне на слово верить нельзя
. Может админ чего скажет, у него по больше опыта.
Re: Урок 44. События в ListView
Добавлено: 23 мар 2012, 19:02
boriakaif
Под id здесь я подразумеваю id тестбокса в listview. то есть я знаю на какую страницу должен вести клик по первому текстбоксу в listview и в case 1: обрабатываю нажатие.
вопрос в том, насколько это правильно?)
Re: Урок 44. События в ListView
Добавлено: 23 мар 2012, 21:21
boriakaif
Код: Выделить всё
switch ((int)id) {
case 0:
Intent intent = new Intent(this, activitytwo.class);
startActivity(intent);
break;
case 1:
break;
}
такой код для перехода на страницу не работает
Re: Урок 44. События в ListView
Добавлено: 26 мар 2012, 22:15
student44
У Вас this указывает на интерфейс OnItemClickListener, а должен - на текущее Activity
Re: Урок 44. События в ListView
Добавлено: 27 мар 2012, 22:55
student44
Например: Intent intent=new Intent(MyActivity.this,activitytwo.class); где MyActivity родительский Activity.
Возможно также незарегистрирован activitytwo в AndroidManifest.xml.
Re: Урок 44. События в ListView
Добавлено: 29 мар 2012, 00:38
andev
Какое событие "слушать", если хочу обновить 1 элемент в ListView при изменении источника данных (адаптер кастомный)
ОТВЕТ
вызывать myAdapter.notifyDataSetChanged()
Re: Урок 44. События в ListView
Добавлено: 25 май 2012, 14:14
prot0n
OnItemSelectedListener нужен для поддержки фокуса (выделение пунктов списка) тракболом или клавиатурой.
Re: Урок 44. События в ListView
Добавлено: 31 май 2012, 08:43
smeh
....(В нашем случае id равен position. Я пока не встречал случаев id != position, но наверняка они есть)
Они могут различаться, когда в качестве поставщика данных используется Cursor.
В этом случае id будет указывать на поле _id из Cursor, а он разумеется не всегда будет совпадать с position.
При работе с базой данных без этого id практически никуда
Re: Урок 44. События в ListView
Добавлено: 31 май 2012, 16:51
damager82
smeh писал(а):....(В нашем случае id равен position. Я пока не встречал случаев id != position, но наверняка они есть)
Они могут различаться, когда в качестве поставщика данных используется Cursor.
В этом случае id будет указывать на поле _id из Cursor, а он разумеется не всегда будет совпадать с position.
При работе с базой данных без этого id практически никуда
Все так. Я когда начал возится с курсорами потом тоже это увидел )
Re: Урок 44. События в ListView
Добавлено: 04 июн 2012, 11:01
romanzi
Нужно удалить пункт меню по id.
Приложение выкидывает ошибку.
Код: Выделить всё
List<String> items = new ArrayList<String>();
ArrayAdapter<String> arrayAdapter;
items.remove(3);
arrayAdapter.notifyDataSetChanged();
Re: Урок 44. События в ListView
Добавлено: 04 июн 2012, 11:58
KamiSempai
romanzi писал(а):Приложение выкидывает ошибку.
Какую именно ошибку?
Re: Урок 44. События в ListView
Добавлено: 17 авг 2012, 18:15
Quqush
С этого урока я вообще перестал что-либо понимать.
Re: Урок 44. События в ListView
Добавлено: 27 авг 2012, 11:04
damager82
Quqush писал(а):С этого урока я вообще перестал что-либо понимать.
Возможно мало опыта работы с Java? Попробуйте что-нибудь прочесть из этой темы:
viewtopic.php?f=17&t=147
Re: Урок 44. События в ListView
Добавлено: 05 сен 2012, 09:35
etlt
Подскажите что не так?
На активити есть спинер id=youYearFrom
Код: Выделить всё
Spinner spinner = (Spinner) findViewById(R.id.youYearFrom);
spinner.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> a, View v, int position, long id)
{
Toast.makeText(MainActivity.this, "БУМБУМ", Toast.LENGTH_LONG).show();
}
});
При компиляции выходит ошибка "
Source not found."
Опытным путем определил что во всем виновата строка с "
spinner.setOnItemClickListener" - если её закомментировать ошибки нет. Однако почему она возникает не пойму
Re: Урок 44. События в ListView
Добавлено: 05 сен 2012, 10:49
math64
Попробуй сделать clean проекту.
А Строку "БУМБУМ" лучше загнать в ресурсы.
Слушатель можно сделать полем класса:
Код: Выделить всё
private OnItemClickListener spinnerListener = new OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Toast.makeText(MainActivity.this, getString(R.string,bumbum), Toast.LENGTH_LONG).show();
}
};
...
Spinner spinner = (Spinner) findViewById(R.id.youYearFrom);
spinner.setOnItemClickListener(spinnerListener);
или вместо анонимного использовать обычный вложенный.
Re: Урок 44. События в ListView
Добавлено: 05 сен 2012, 11:39
etlt
сделал clean
Слушатель оставил пустым (для минимилизации ошибок)
Код: Выделить всё
OnItemClickListener spinnerListener = new OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
}
};
и код оставил таким
Код: Выделить всё
Spinner spinner = (Spinner) findViewById(R.id.youYearFrom);
spinner.setOnItemClickListener(spinnerListener);
Та же самая ошибка =(
стоит закомментировать строку
Код: Выделить всё
//spinner.setOnItemClickListener(spinnerListener);
ошибка пропадает
как не странно но ситуация такая же и с "
OnClickListener" на любом даже вновь созданном Spinnerе