У меня есть следующий код для создания ListView:
SimpleAdapter adapter=new SimpleAdapter(this, DictionaryDbWrapper.getInstance().getAllWords(),
android.R.layout.simple_list_item_2, new String[]{DictionaryDbHelper.WORD, DictionaryDbHelper.CATEGORY},
new int[]{android.R.id.text1, android.R.id.text2});
mList.setAdapter(adapter);
Он работает и показывает мне элементы, все правильно. Также у меня есть OnItemClickListener со следующим кодом для кликов по элементам:
View view=mList.getSelectedView();
if (view==null) {
Toast.makeText(UpdatingWordActivity.this, "1", Toast.LENGTH_LONG).show();
}
Но mList.getSelectedView() также возвращает мне значение null. Зачем?
UPDATE: почему это исключение броска бросает:
View v=(View)mList.getItemAtPosition(0);
Вызов getSelectedView()
предназначен для использования переключателей со списком. См. CHOICE_MODE_SINGLE. getItemAtPosition()
просто вызывает getItem(position)
на базовом адаптере; в вашем случае это SimpleAdapter. Это кастинг вызывает исключение, потому что SimpleAdapter.getItem()
не возвращает представление, оно возвращает (я считаю) карту данных, находящихся в данной позиции в адаптере. Другие адаптеры возвращают другие вещи для метода getItem()
. Например, CursorAdapter возвращает курсор.
См. Ответ выше для ответа на первый вопрос
ListView OnItemClickListener
имеет параметр View v
as, вам нужно использовать этот параметр для получения текста.
Вот учебник для Android по этой теме.