我正在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