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