listview的item长按事件处理的两种方法



要实现ListView的长按点击事件,可以直接调用setOnItemLongClickListener,在onLongClick里面实现逻辑,也可以使用注册上下文菜单的方法,比如要实现下面的效果


可以在item的长按事件中弹出一个对话框或者popupwindow来实现,今天我们换一种方法

[java] view plain copy
  1. package com.example.test;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.ContextMenu;  
  6. import android.view.ContextMenu.ContextMenuInfo;  
  7. import android.view.MenuItem;  
  8. import android.view.View;  
  9. import android.widget.AdapterView.AdapterContextMenuInfo;  
  10. import android.widget.ArrayAdapter;  
  11. import android.widget.ListView;  
  12. import android.widget.Toast;  
  13.   
  14. public class MainActivity extends Activity {  
  15.     private ListView mListView;  
  16.     private String msg[] = new String[] { "测试1""测试2""测试3""测试4" };  
  17.     String number;  
  18.   
  19.     @Override  
  20.     protected void onCreate(Bundle savedInstanceState) {  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(R.layout.activity_main);  
  23.   
  24.         mListView = (ListView) findViewById(R.id.listview);  
  25.         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,  
  26.                 android.R.layout.simple_list_item_1, msg);  
  27.         mListView.setAdapter(adapter);  
  28.         registerForContextMenu(mListView);  
  29.     }  
  30.   
  31.     @Override  
  32.     public void onCreateContextMenu(ContextMenu menu, View v,  
  33.             ContextMenuInfo menuInfo) {  
  34.         super.onCreateContextMenu(menu, v, menuInfo);  
  35.         number = (String) mListView  
  36.                 .getItemAtPosition(((AdapterContextMenuInfo) menuInfo).position);//获取listview的item对象  
  37.         getMenuInflater().inflate(R.menu.context_menu, menu);  
  38.     }  
  39.   
  40.     @Override  
  41.     public boolean onContextItemSelected(MenuItem item) {  
  42.   
  43.         if (item.getItemId() == R.id.menu_item1) {  
  44.   
  45.             Toast.makeText(this, number, Toast.LENGTH_SHORT).show();  
  46.         } else if (item.getItemId() == R.id.menu_item2) {  
  47.             Toast.makeText(this"选项2被选择了", Toast.LENGTH_SHORT).show();  
  48.         }  
  49.         return super.onContextItemSelected(item);  
  50.     }  
  51. }  

长按测试2,显示上下文菜单,再点击菜单项1,显示一个吐司,效果如下


context_menu.xml

[java] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.   
  4.     <item  
  5.         android:id="@+id/menu_item1"  
  6.         android:icon="@drawable/avatar_default"  
  7.           
  8.         android:title="菜单项1"/>  
  9.     <item  
  10.         android:id="@+id/menu_item2"  
  11.         android:icon="@drawable/avatar_default"  
  12.         android:title="菜单项2"/>  
  13.   
  14. </menu>  

activity_main.xml

[java] view plain copy
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:background="@color/white"  
  6.     android:paddingBottom="@dimen/activity_vertical_margin"  
  7.     android:paddingLeft="@dimen/activity_horizontal_margin"  
  8.     android:paddingRight="@dimen/activity_horizontal_margin"  
  9.     android:paddingTop="@dimen/activity_vertical_margin"  
  10.     tools:context="com.example.test.MainActivity" >  
  11.   
  12.     <ListView  
  13.         android:id="@+id/listview"  
  14.         android:layout_width="match_parent"  
  15.         android:layout_height="wrap_content" />  
  16.   
  17. </RelativeLayout>  

registerForContextMenu的源码

[java] view plain copy
  1. public void registerForContextMenu(View view) {  
  2.         view.setOnCreateContextMenuListener(this);  
  3.     }  

可以看出,不只是ListView,只要是View就可以注册上下文菜单,打开setOnCreateContextMenuListener

[java] view plain copy
  1. public void setOnCreateContextMenuListener(OnCreateContextMenuListener l) {  
  2.        if (!isLongClickable()) {  
  3.            setLongClickable(true);  
  4.        }  
  5.        getListenerInfo().mOnCreateContextMenuListener = l;  
  6.    }  

原来是注册了View的长按事件
展开阅读全文

没有更多推荐了,返回首页