【问题标题】:Android creating a popup dialog by long click on listview itemAndroid通过长按listview项目创建弹出对话框
【发布时间】:2020-10-07 06:28:11
【问题描述】:

我有点困惑如何处理一个单独的列表视图项目的长按,然后让项目显示一个弹出窗口。

这是我的代码,如果你不明白,请提出一些问题。

MainActivity.java

ListView listView = (ListView) findViewById(R.id.listView);

listView.setOnLongClickListener(new View.OnLongClickListener() {
            @SuppressLint("ResourceType")
            @Override
            public boolean onLongClick(View v) {
                PopupMenu p = new PopupMenu(MainActivity.this, v);
                p.getMenuInflater().inflate(R.layout.popup_layout, p.getMenu());
                p.show();
                return true;
            }
        });

popup_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <menu
        android:layout_width="185dp"
        android:layout_height="141dp"
        tools:ignore="MissingConstraints"
        tools:layout_editor_absoluteX="96dp"
        tools:layout_editor_absoluteY="83dp">

        <item
            android:id="@+id/order_takeout"
            android:onClick="doTakeOut"
            android:title="@string/order_takeout"
            android:layout_width="delete" />

        <item
            android:id="@+id/order_eat_in"
            android:onClick="doEatIn"
            android:title="@string/edit" />
    </menu>
</androidx.constraintlayout.widget.ConstraintLayout>

viewcontents_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/listView"
        android:layout_width="409dp"
        android:layout_height="729dp"
        tools:layout_editor_absoluteX="1dp"
        tools:layout_editor_absoluteY="1dp"
        android:longClickable="true"
        tools:ignore="MissingConstraints"/>

</androidx.constraintlayout.widget.ConstraintLayout>

如果有人可以帮助我,我很高兴得到答案。 保持健康!

【问题讨论】:

    标签: android listview popup


    【解决方案1】:

    你的错误是使用setOnLongClickListener 你可以使用:

    listView.setOnItemLongClickListener(new OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                    int pos, long id) {
    
    
                return true;
            }
        }); 
    

    【讨论】:

    • 如果我这样做,我会在(新 AdapterVie.onItemLongClickListener)类“派生自 OnLongClickListener 的匿名类”上出现错误,必须将其声明为抽象或在“中实现抽象方法”“onLongClick(View)” OnLongClickListener' 它说,我必须使用 public boolean onLongClick(View v) 可能是您这边的另一种解决方案?
    • 现在我得到一个异常:尝试在以下行的空对象引用上调用虚拟方法 'void android.widget.ListView.setOnItemLongClickListener(android.widget.AdapterView$OnItemLongClickListener)':@987654323 @
    【解决方案2】:

    你必须在 ListView 中设置 setOnItemLongClickListener() how to implement a long click listener on a listview

    【讨论】:

    • 好的,给我一分钟我也试试。
    • 如果它有效,请随意标记为可以接受的人正在寻找相同的解决方案
    • 是的,其他人可以看到我的帖子我需要点赞@Nihthiya Althaf
    • 现在我得到一个异常:尝试在以下行的空对象引用上调用虚拟方法 'void android.widget.ListView.setOnItemLongClickListener(android.widget.AdapterView$OnItemLongClickListener)':@987654322 @
    • 如果可能的话,在这里发布您的代码以获得更好的说明
    【解决方案3】:

    所以我解决了这个问题。

    1. 使用另一个名为 ViewListContents 的 java 类并更改了我的 popup_layout 所在的位置,我将它移到菜单中并设置了一些菜单标签而不是约束标签。

    2. 我已在 onItemLongClickListener 中将 R.layout 更改为 R.menu

    在这个类中我是这样使用它的:

        listView = (ListView) findViewById(R.id.listView);
    
        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) {
                PopupMenu p = new PopupMenu(ViewListContents.this, v);
                MenuInflater inflater = p.getMenuInflater();
                inflater.inflate(R.menu.popup_layout, p.getMenu());
                p.show();
                return true;
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多