首页 > 解决方案 > 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();


});

标签: javaandroidandroid-listview

解决方案


尽管我认为这种方法本身并不可行,但您或许应该利用Swipe执行多项操作以获得更好的 UX。

无论如何,一个可能的解决方案可能是您存储两个警报对话框的私有实例,如下所示:

private AlertDialog clickDiag;

private void function(){
   AlertDialog.Builder adb=new AlertDialog.Builder(Read.this);
   clickDiag = adb.show();
}

现在您已经存储了实例,Dialogs 中有一个有用的功能:

clickDiag.isShowing();

我认为您现在可以理解它可以用作检查特定对话框的一个或另一个实例是否可见,因此不要显示另一个,反之亦然。


推荐阅读