Android 为listview设置长时间单击侦听器

Android 为listview设置长时间单击侦听器,android,listview,listener,long-click,Android,Listview,Listener,Long Click,我有以下代码: 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,

我有以下代码:

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;
        }}); 
listView.setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
长单击(AdapterView arg0,视图v,
整数索引,长arg3){
//编写代码
返回false;
}}); 

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

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的实例设置为

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

        });)

在您的情况下,您可以不用扩展ListActivity,而是用xml创建一个列表视图,并在MainActivity中找到该视图,然后按照上面的步骤进行操作。

您的问题与非常类似,但看起来并不是完全重复的

您注意到,该类没有专门针对这种情况的方法重写

为了将此功能添加为方法重写,您的类应该实现
AdapterView.OnItemLongClickListener
接口,然后您可以添加
onItemLongClick()
方法重写,该方法重写与您已有的
onListItemClick()
方法重写一样,但会响应长时间的单击

只需确保按照中的说明操作,您必须在布局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();  

    }

 //....................
公共类MainActivity扩展ListActivity实现AdapterView.OnItemLongClickListener{
列表视图列表视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView ListView=(ListView)findViewById(R.id.list);
listview.setLongClickable(真);
}
@凌驾
长按(自适应视图l、视图v、,
最终整数位置,长id){
Toast.makeText(这个“长点击位置:”+位置,Toast.LENGTH_long.show();
返回true;
}
受保护的void onListItemClick(列表视图l、视图v、最终整数位置、长id){
super.onListItemClick(左、右、位置、id);
Toast.makeText(这是“短按位置:+位置,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;
        }
});
listview.setOnItemLongClickListener(新的OnItemLongClickListener(){
@凌驾
长单击(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
Toast.makeText(ClassName.class,“长点击触发器:”,Toast.LENGTH_Long.show();
返回true;
}
});

您能否尝试以不同的方式详细解释一下您想做什么?您的示例代码似乎没有完成任何任务,因此很难猜测…我需要一个函数,当我长时间(比如2秒)单击时,它可以在listview中的一个项目上,然后在函数中执行我的其他代码。你试过了吗?是的,我看到了这个,但我需要作为一个函数来执行。看我的示例函数。我需要完全一样的代码,但使用longclick。