android - 如何在 ListView 上同时实现 onClick 和 onLongClick 监听器?
问题描述
我希望 ListView 的项目对通常的点击和长按做出反应。我尝试设置两个侦听器,但它告诉我第一个侦听器不能应用于第二个侦听器。这是我的代码的一部分:
AdapterView.OnItemClickListener itemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
TextView product = (TextView) view;
...
}
};
AdapterView.OnItemLongClickListener itemLongClickListener = new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
TextView product = (TextView) view;
product.setBackgroundColor(Color.GREEN);
return true;
}
};
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_list_item_1,
arrayOfNames);
ListView itemsView = (ListView)findViewById(R.id.items);
itemsView.setOnItemClickListener(itemClickListener);
itemsView.setOnItemClickListener(itemLongClickListener);
解决方案
您必须在 ListView 中设置 setOnItemLongClickListener():
lv.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int pos, long id) {
// TODO Auto-generated method stub
Log.v("long clicked","pos: " + pos);
return true;
}
});
列表中每个项目的 XML(如果您使用自定义 XML)也必须具有android:longClickable="true"
(或者您可以使用便捷方法lv.setLongClickable(true);).
。这样您就可以拥有一个列表,其中只有一些项目响应 longclick。
推荐阅读
- azure - 如何在复制活动(NoSQL 到 SQL)中过滤 ADF(Azure 数据工厂)V2 中上次成功触发器运行的数据?
- unit-testing - 如何通过 io.mockk 测试使用不同参数多次调用的方法?
- angular - Angular 7 风格不同层次的垫子树
- javascript - 在 Extjs 3.4 中渲染之前格式化加载数据
- .net-core - 如何首先从表数据库更新模型
- c# - 我想获取两个日期之间的记录,但日期列在数据库中是字符串格式。使用 linq 查询
- javascript - How to create an array from object which has specific properties in child objects
- python - 如何从python中找到dll函数?
- javascript - 如何同时处理保存多对多关系?
- amazon-web-services - 在分区中插入带有特殊字符的 Hive 表