java - setOnItemLongClickListener 在它之后调用 setOnItemClickListener
问题描述
我有一个列表,我想允许用户使用长按删除项目并在单击时进行编辑。
问题是,如果用户想删除一个项目(长按该项目),我的应用程序将打开删除确认消息以及编辑确认。
任何想法如何在用户长按列表项时仅打开删除(setOnItemLongClickListener)消息?
// DELETE
list.setOnItemLongClickListener((parent, view, position, arg3) -> {
Contacts contacts = queue.get(position);
AlertDialog.Builder adb=new AlertDialog.Builder(Read.this);
adb.setTitle("Delete?");
adb.setMessage("Are you sure you want to delete?");
adb.setNegativeButton("Cancel", null);
adb.setPositiveButton("Ok", (dialog, which) -> {
deleteContact(Read.this, contacts.phone, contacts.name);
mobileArray.remove(position);
adapter.notifyDataSetChanged();
});
adb.show();
return false;
});
// EDIT
list.setOnItemClickListener((parent, view, position, arg3) -> {
Contacts contacts = queue.get(position);
AlertDialog.Builder adb=new AlertDialog.Builder(Read.this);
adb.setTitle("Edit?");
adb.setMessage("Edit?");
adb.setNegativeButton("Cancel", null);
adb.setPositiveButton("Ok", (dialog, which) -> {
Log.d("edit:", contacts.name + contacts.id + contacts.phone + contacts.email);
});
adb.show();
});
解决方案
尽管我认为这种方法本身并不可行,但您或许应该利用Swipe执行多项操作以获得更好的 UX。
无论如何,一个可能的解决方案可能是您存储两个警报对话框的私有实例,如下所示:
private AlertDialog clickDiag;
private void function(){
AlertDialog.Builder adb=new AlertDialog.Builder(Read.this);
clickDiag = adb.show();
}
现在您已经存储了实例,Dialogs 中有一个有用的功能:
clickDiag.isShowing();
我认为您现在可以理解它可以用作检查特定对话框的一个或另一个实例是否可见,因此不要显示另一个,反之亦然。
推荐阅读
- php - 从服务器 curl php 获取 cookie
- python - 准备 docker 图像时选择性地忽略文件
- powershell - Powershell启动exe网络共享开关问题
- r - twitteR - searchTwitter 返回截断的文本字段
- python - 使用Python将带有注释的json文件转换为数据框
- android - 从回收站视图中单击的项目中获取价值
- ssl - 使用 cert-manager istio ingress 和 LetsEncrypt 在 kubernetes 中配置 SSL 证书
- ssl - Hyperledger Fabric(第一个应用程序)+ Hyperledger Explorer 错误
- javascript - 访问占位符文本以开玩笑验证
- sql - 根据单元格位置从excel批量插入到sql中的选择性字段