是否可以使用onLongPress
我想使用OnGestureListener
- onLongPress
来监听longpress
并删除列表中的项目并相应地通过适配器进行更新。
我的问题是,如果我使用自定义适配器,那么onlistItemclick
和onItemLongClick
冲突并且长按不会触发任何内容!
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
Toast.makeText(listmodified.this, "A long click detected", Toast.LENGTH_SHORT).show();
if (e.getAction()==MotionEvent.ACTION_DOWN)
{
OnItemLongClickListener itemDelListener = new OnItemLongClickListener(){
//@Override
public boolean onItemLongClick(AdapterView<?> parent, View arg1,
int position, long arg3) {
// TODO Auto-generated method stub
itemSelected=parent.getItemAtPosition(position).toString();
adapter.remove(itemSelected);
myList.remove(position);
adapter.notifyDataSetChanged();
Toast.makeText(listmodified.this, "IN LONGCLICK", Toast.LENGTH_SHORT).show();
return false;
}};
longClickedItem = -1;
}
答案 0 :(得分:1)
在这里使用Handler的概念。
Step1 声明一个常量
private static final byte UPDATE_LIST = 100;
Step2 只需按一下按钮
即可调用处理程序 OnItemLongClickListener itemDelListener = new OnItemLongClickListener(){
//@Override
public boolean onItemLongClick(AdapterView<?> parent, View arg1,
int position, long arg3) {
// TODO Auto-generated method stub
itemSelected=parent.getItemAtPosition(position).toString();
adapter.remove(itemSelected);
Message msg = new Message();
msg.what = UPDATE_LIST;
msg.arg1 = position
updateListHandler.sendMessage(msg);
Toast.makeText(listmodified.this, "IN LONGCLICK", Toast.LENGTH_SHORT).show();
return false;
}};
Step3 定义处理程序
private Handler updateListHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_LIST:
int position = msg.arg1;
list.remove(position);
adapter.notifyDataSetChanged();
break;
}
;
};
};
中的回复
答案 1 :(得分:0)
您需要使用View.setOnClickListener()向您的视图注册OnClickListener。
编辑: 在这个链接上可以找到一个平庸的例子:
http://www.androidsnippets.com/clickable-listview-items
向下翻页到它所说的活动并通过那里查看。他们实现自己的类来做所有事情,但是使用来自超类的方法(而不是自定义类的一部分)我不能保证这将确保解决你的问题,但应该朝着正确的方向迈出一步
答案 2 :(得分:0)
试试这个:
listView.setOnItemLongClickListener(new OnItemLongClickListener(){
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {
listView.removeViewAt(position);
return false;
}
});