2010-03-18 1 views
130

Как прослушивать событие click в ListView?Как обращаться с ListView в Android

Это то, что я сейчас

ListView list = (ListView)findViewById(R.id.ListView01); 
... 
list.setAdapter(adapter); 

Когда я следующий

list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    public void onItemSelected(AdapterView parentView, View childView, 
                 int position, long id) 
    { 
     setDetail(position); 
    } 

    public void onNothingSelected(AdapterView parentView) { 

    } 
}); 

Это, кажется, не делать ничего на мыши.
И все эти коды живут внутри класса, который расширяет Activity.

ответ

173

На вашем список, используйте setOnItemClickListener

+0

Thanks David. Geezzz, я попробовал setOnClickListener и setOnItemSelectedListener, но пропустил чтение setOnItemClickListener. Спасибо, Tee – teepusink

+0

Я сделал то же самое, что и teepusink: D –

+0

Как вы тогда отправляете данные на этот подробный просмотр? (Как YouTube веб-видео) – Sauron

41

Вы должны установить завышенный вид «Clickable» и «возможность слушать нажмите событие» в классе адаптера GetView() метод.

convertView = mInflater.inflate(R.layout.list_item_text, null); 
convertView.setClickable(true); 
convertView.setOnClickListener(myClickListener); 

и объявить щелчок слушателя в вашем ListActivity следующим образом,

public OnClickListener myClickListener = new OnClickListener() { 
public void onClick(View v) { 
       //code to be written to handle the click event 
    } 
}; 

Это справедливо только тогда, когда вы настраиваете адаптер путем расширения BaseAdapter.

Сошлитесь ANDROID_SDK/образцы/ApiDemos/SRC/COM/пример/Android/Apis/просмотр/List14.java для более подробной информации

+0

спасибо Vijay, у меня есть проблема с щелчком на экране надувания. У меня есть решение из вашего ответа. – dhaiwat

+0

Но это не определяет, какой элемент кликается, что делает его более или менее бесполезным для списка? Верный? –

+0

вы можете установить тег для convertView и проверить его в onClick .. с помощью тега, который нажал элемент, можно идентифицировать ... –

17

два ответы, прежде чем мое правильно - вы можете использовать OnItemClickListener.

Хорошо отметить, что разница между OnItemClickListener и OnItemSelectedListener, в то время как звучанием тонким, на самом деле важно, так как выбор и фокус связаны с режимом прикосновения AdapterView.

По умолчанию в режиме касания нет выбора и фокуса. Вы можете посмотреть here для получения дополнительной информации по этому вопросу.

+2

bah android madness – max4ever

84

Пусть объект ListView является лев, сделать включено следующее:

lv.setClickable(true); 
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 

    Object o = lv.getItemAtPosition(position); 
    /* write you handling code like... 
    String st = "sdcard/"; 
    File f = new File(st+o.toString()); 
    // do whatever u want to do with 'f' File object 
    */ 
    } 
}); 
+1

'lv' недоступен внутри' onItemClick'. Какой хороший способ обойти это? – shinjin

+1

@shinjin Сделайте это окончательным. 'final ListView lv = (ListView) findViewById (R.id.your_list_view);' – Lekensteyn

+0

Чистый путь: 'Object o = ((ListView) arg0) .getItemAtPosition (position);' – JimmyB

5

Вы должны использовать setOnItemClickListener кто-то сказал.
код должен быть таким:

listView.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     // When clicked, show a toast with the TextView text or do whatever you need. 
     Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); 
    } 
}); 
5

Во-первых, класс должен реализует щелчок listenener:

implements OnItemClickListener 

Затем установите слушателя в ListView

yourList.setOnItemclickListener(this); 

И, наконец, создать метод clic:

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, 
long id) { 
Toast.makeText(MainActivity.this, "You Clicked at " +countries[+ position], Toast.LENGTH_SHORT).show(); 
} 

вы можете посмотреть и скачать код here

6

Это решение действительно минималистично и не испортило ваш код.

В вашем list_item.xml (НЕ listView!) Присвоить атрибут андроида: OnClick как это:

<RelativeLayout android:onClick="onClickDoSomething"> 

, а затем в вызове деятельности этот метод:

public void onClickDoSomething(View view) { 
    // the view is the line you have clicked on 
} 
1

Использование setOnItemClickListener (API) в вашей деятельности. Ниже приведен образец.

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 

@Override 
public void onItemClick(AdapterView<> parent, View view, int position, long id) 
{ 
    // your code here. 
} 

});