为列表视图设置长按监听器

Set long click listener for listview

我有以下代码:

public class MainActivity extends ListActivity { 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}   
protected void onListItemClick(ListView l, View v, final int position, long id) {
    super.onListItemClick(l, v, position, id);
}}

我需要将其更改为 onListItemLongClick(),但如何更改?可能吗?

试试这个

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

        public boolean onItemLongClick(AdapterView<?> arg0, View v,
                int index, long arg3) {

             // write your code

            return false;
        }}); 

您可以实现侦听器,然后回调将作为函数(方法)出现在您的 class:

public class MainActivity extends ListActivity implements View.OnLongClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        View listView = findViewById(R.id.list_view);
        listView.setOnLongClickListener(this);
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
    }

    @Override
    public boolean onLongClick(View v) {
        // Do your work here
        return false;
    }

}

是的,这是可能的,而且很容易实现, 只需将列表视图的实例设为

ListView lv = (ListView)findViewById(R.id.listview);
lv.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View 
                    // your code here
                    return true;
                }

        });)

在您的情况下,您可以在 xml 中创建一个列表视图,然后在 MainActivity 中找到该视图,然后执行上述步骤。

您的问题与 this one 非常相似,但看起来并不完全相同。

您注意到 ListActivity class 没有专门针对这种情况的方法覆盖。

为了将此功能添加为方法覆盖,您的 class 应该实现 AdapterView.OnItemLongClickListener 接口,然后您可以添加 onItemLongClick() 方法覆盖,其作用与onListItemClick() 方法覆盖您已有的方法,但会响应长按。

只需确保按照 this answer 中的说明进行操作,您必须在布局 xml 中使用 android:longClickable="true",或调用 listview.setLongClickable(true);

示例:

public class MainActivity extends ListActivity implements AdapterView.OnItemLongClickListener {

    ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView listview = (ListView) findViewById(R.id.list);

        listview.setLongClickable(true);

    }

    @Override
    public boolean onItemLongClick(AdapterView<?> l, View v,
                                   final int position, long id) {

        Toast.makeText(this, "long clicked pos: " + position, Toast.LENGTH_LONG).show();

        return true;
    }

    protected void onListItemClick(ListView l, View v, final int position, long id) {
        super.onListItemClick(l, v, position, id);

        Toast.makeText(this, "short clicked pos: " + position, Toast.LENGTH_LONG).show();  

    }

 //....................

你可以简单地用 setOnItemLongClickListener

listview.setOnItemLongClickListener(new OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            Toast.makeText(ClassName.class, "Long Clicked Trigger: ", Toast.LENGTH_LONG).show();
            return true;
        }
});