首页 > 解决方案 > 如何在 ListView 上同时实现 onClick 和 onLongClick 监听器?

问题描述

我希望 ListView 的项目对通常的点击和长按做出反应。我尝试设置两个侦听器,但它告诉我第一个侦听器不能应用于第二个侦听器。这是我的代码的一部分:

    AdapterView.OnItemClickListener itemClickListener = new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        TextView product = (TextView) view;
                ...
    }
};

AdapterView.OnItemLongClickListener itemLongClickListener = new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
        TextView product = (TextView) view;
        product.setBackgroundColor(Color.GREEN);
        return true;
    }
};

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
        this,
        android.R.layout.simple_list_item_1,
        arrayOfNames);

ListView itemsView = (ListView)findViewById(R.id.items);
itemsView.setOnItemClickListener(itemClickListener);
itemsView.setOnItemClickListener(itemLongClickListener);

标签: androidlistviewonclicklisteneronlongclicklistener

解决方案


您必须在 ListView 中设置 setOnItemLongClickListener():

lv.setOnItemLongClickListener(new OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                int pos, long id) {
            // TODO Auto-generated method stub

            Log.v("long clicked","pos: " + pos);

            return true;
        }
    }); 

列表中每个项目的 XML(如果您使用自定义 XML)也必须具有android:longClickable="true"(或者您可以使用便捷方法lv.setLongClickable(true);).。这样您就可以拥有一个列表,其中只有一些项目响应 longclick。


推荐阅读