Урок 44. События в ListView

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 44. События в ListView

Сообщение damager82 » 22 дек 2011, 03:00

В этом уроке:

- рассматриваем события ListView: нажатие - onItemClick, выделение - onItemSelect, прокрутка - onScroll

Click here to read this article!
Последний раз редактировалось damager82 02 май 2017, 23:34, всего редактировалось 6 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

boriakaif
Сообщения: 6
Зарегистрирован: 22 мар 2012, 19:28

Re: Урок 44. События в ListView

Сообщение boriakaif » 22 мар 2012, 21:20

Наконец-то открыли регистрацию :)
Делаю по вашему уроку, хочу по нажатию на элементы списка, открывать следующие страницы, естественно, то что написано ниже даже говнокодом не назовешь)
каким способом лучше реализовать это?
я читал, что для отдельной страницы нужно отдельное активити, и т.д. но если можно хотелось бы пример кода, как это сделать для одного элемента списка, а дальше я уж как нибудь сам) на андроиде новичек, как и в 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.
На Вашем сайте самые исчерпывающие уроки! Спасибо, за то что вы делаете

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

Re: Урок 44. События в ListView

Сообщение KamiSempai » 23 мар 2012, 11:34

boriakaif писал(а):...если можно хотелось бы пример кода, как это сделать...
Вся нужная Вам информация находится в уроках 21 - 25.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

boriakaif
Сообщения: 6
Зарегистрирован: 22 мар 2012, 19:28

Re: Урок 44. События в ListView

Сообщение boriakaif » 23 мар 2012, 14:05

а вот именно сам выбор, какую активити стоит запустить - такой подход, (switch-case конструкция в обработчике нажатия на список) это нормально?
можно ли просто по id выбирать?

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

Re: Урок 44. События в ListView

Сообщение KamiSempai » 23 мар 2012, 16:44

Даже и не знаю как ответить. Все зависит от ситуации.
Я правильно понял? Под id подразумевается R.layout.test_layout или R.layout.test_layout2? По id (экрана) можно будет выбрать если есть какая либо связь между строкой списка и этим id . Тут такой связи нет, и единственным нормальным решением будет switch-case.
К чему стоит придраться - это прямое указание позиции выбранного элемента. В Java принято использовать идентификаторы (например, такие как "LOG_TAG" из этого урока).

PS: На самом деле, я сам в Java новичок, поэтому мне на слово верить нельзя :). Может админ чего скажет, у него по больше опыта.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

boriakaif
Сообщения: 6
Зарегистрирован: 22 мар 2012, 19:28

Re: Урок 44. События в ListView

Сообщение boriakaif » 23 мар 2012, 19:02

Под id здесь я подразумеваю id тестбокса в listview. то есть я знаю на какую страницу должен вести клик по первому текстбоксу в listview и в case 1: обрабатываю нажатие.
вопрос в том, насколько это правильно?)

boriakaif
Сообщения: 6
Зарегистрирован: 22 мар 2012, 19:28

Re: Урок 44. События в ListView

Сообщение boriakaif » 23 мар 2012, 21:21

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

switch ((int)id) {
            case 0:
            	Intent intent = new Intent(this, activitytwo.class);
            	startActivity(intent);
            	
            
                
              break;
            case 1:
              
            
              break;
            }
такой код для перехода на страницу не работает

student44
Сообщения: 2
Зарегистрирован: 26 мар 2012, 22:05

Re: Урок 44. События в ListView

Сообщение student44 » 26 мар 2012, 22:15

У Вас this указывает на интерфейс OnItemClickListener, а должен - на текущее Activity

student44
Сообщения: 2
Зарегистрирован: 26 мар 2012, 22:05

Re: Урок 44. События в ListView

Сообщение student44 » 27 мар 2012, 22:55

Например: Intent intent=new Intent(MyActivity.this,activitytwo.class); где MyActivity родительский Activity.
Возможно также незарегистрирован activitytwo в AndroidManifest.xml.

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Урок 44. События в ListView

Сообщение andev » 29 мар 2012, 00:38

Какое событие "слушать", если хочу обновить 1 элемент в ListView при изменении источника данных (адаптер кастомный)
ОТВЕТ
вызывать myAdapter.notifyDataSetChanged()

prot0n
Сообщения: 1
Зарегистрирован: 25 май 2012, 11:44

Re: Урок 44. События в ListView

Сообщение prot0n » 25 май 2012, 14:14

OnItemSelectedListener нужен для поддержки фокуса (выделение пунктов списка) тракболом или клавиатурой.

smeh
Сообщения: 4
Зарегистрирован: 31 май 2012, 08:37

Re: Урок 44. События в ListView

Сообщение smeh » 31 май 2012, 08:43

....(В нашем случае id равен position. Я пока не встречал случаев id != position, но наверняка они есть)

Они могут различаться, когда в качестве поставщика данных используется Cursor.
В этом случае id будет указывать на поле _id из Cursor, а он разумеется не всегда будет совпадать с position.
При работе с базой данных без этого id практически никуда :-)

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 44. События в ListView

Сообщение damager82 » 31 май 2012, 16:51

smeh писал(а):....(В нашем случае id равен position. Я пока не встречал случаев id != position, но наверняка они есть)

Они могут различаться, когда в качестве поставщика данных используется Cursor.
В этом случае id будет указывать на поле _id из Cursor, а он разумеется не всегда будет совпадать с position.
При работе с базой данных без этого id практически никуда :-)
Все так. Я когда начал возится с курсорами потом тоже это увидел )
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

romanzi
Сообщения: 8
Зарегистрирован: 31 май 2012, 21:55

Re: Урок 44. События в ListView

Сообщение romanzi » 04 июн 2012, 11:01

Нужно удалить пункт меню по id.
Приложение выкидывает ошибку.

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

 List<String> items = new ArrayList<String>();
	ArrayAdapter<String> arrayAdapter;	

items.remove(3);
    arrayAdapter.notifyDataSetChanged();

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

Re: Урок 44. События в ListView

Сообщение KamiSempai » 04 июн 2012, 11:58

romanzi писал(а):Приложение выкидывает ошибку.
Какую именно ошибку?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Quqush
Сообщения: 6
Зарегистрирован: 09 авг 2012, 19:07

Re: Урок 44. События в ListView

Сообщение Quqush » 17 авг 2012, 18:15

С этого урока я вообще перестал что-либо понимать.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 44. События в ListView

Сообщение damager82 » 27 авг 2012, 11:04

Quqush писал(а):С этого урока я вообще перестал что-либо понимать.
Возможно мало опыта работы с Java? Попробуйте что-нибудь прочесть из этой темы: viewtopic.php?f=17&t=147
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

etlt
Сообщения: 8
Зарегистрирован: 30 авг 2012, 20:19

Re: Урок 44. События в ListView

Сообщение etlt » 05 сен 2012, 09:35

Подскажите что не так?
На активити есть спинер 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" - если её закомментировать ошибки нет. Однако почему она возникает не пойму

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Урок 44. События в ListView

Сообщение math64 » 05 сен 2012, 10:49

Попробуй сделать 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);
или вместо анонимного использовать обычный вложенный.

etlt
Сообщения: 8
Зарегистрирован: 30 авг 2012, 20:19

Re: Урок 44. События в ListView

Сообщение etlt » 05 сен 2012, 11:39

сделал 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);
ошибка пропадает :shock:
как не странно но ситуация такая же и с "OnClickListener" на любом даже вновь созданном Spinnerе

Ответить