我正在Android上開發一個簡單的應用程序,其中一些項目顯示在列表中。用戶可以點擊一個,帶他進行進一步的活動。基本知識...Android的ListView不聽一次點擊
但我的OnItemClickListener不會被調用!我發現this very similar question,但解決方案(禁止列表項視圖獲得焦點)不適用於我。但是,長時間點擊會被捕獲 - 我的OnItemLongClickListener被調用。請看下面的代碼並自己嘗試。這是我的代碼的簡化版本,顯示了錯誤行爲。順便說一句:我在Eclipse 3.5.1上使用Andriod SDK 2.0。
package de.sacherkhoudari.listtest;
import java.util.LinkedList;
import java.util.List;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
public class ListTest extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final List<ListEntry> lEntries = new LinkedList<ListEntry>();
for (int ii = 0; ii < 10; ii++)
lEntries.add(new ListEntry("Entry " + ii));
setListAdapter(new ArrayAdapter<ListEntry>(this, R.layout.list_item, lEntries));
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(ListTest.this, "ItemClick at item " + lEntries.get(position).toString(), Toast.LENGTH_LONG).show();
}
});
lv.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(ListTest.this, "ItemLongClick at item " + lEntries.get(position).toString(), Toast.LENGTH_LONG).show();
return false;
}
});
setContentView(lv);
}
}
class ListEntry {
private String name;
public ListEntry(String s) {
name = s;
}
public String toString() {
return name;
}
}
到目前爲止,Java代碼......來這裏的佈局list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="16sp"
android:focusable="false" >
</TextView>
注:android:focusable="false"
沒有影響。
謝謝!
扎赫爾
完美,工作!謝謝!但爲什麼?在添加偵聽器之前調用'setContentView()'時會發生什麼變化? – craesh 2010-02-11 10:37:41
TBH,我不知道。我猜這些事件與活動有關,而不是視圖本身(這只是一種猜測) - 如果你認爲這是正確的,請接受答案 – ccheneson 2010-02-11 10:44:15
顯然上面的評論是不正確的 - 從http://developer.android .com/intl/de/guide/topics/ui/ui-events.html「,一個事件監聽器是View類中的一個接口,它包含一個單一的回調方法,這些方法將在Android框架用戶與用戶界面中的項目交互觸發了監聽器已註冊的內容。「 - 仍然試圖找到一些答案 – ccheneson 2010-02-11 10:48:03