Android ListView两种长按弹出菜单方式

 

/**

* 知识点1:ListView item:两种长按弹出菜单方式
* 知识点2:ListView SimpleAdapter的使用
*  知识点 3:在java代码中创建一个ListView
*/ 

-----------------------------------------------------
Activity

代码: 



public class ListOnLongClickActivity extends Activity { 
        private LinearLayout myListViewlayout; 
        private ListView mListView; 
        SimpleAdapter adapter; 
        public int MID; 

        // 创建一个List对象,用来存放列表项的每一行map信息 
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); 

        @Override
        public void onCreate(Bundle savedInstanceState) { 
                super.onCreate(savedInstanceState); 
                setContentView(R.layout.main); 

                myListViewlayout = (LinearLayout) findViewById(R.id.myListViewlayout); 
                mListView = new ListView(this); 
                // 创建布局参数 
                LinearLayout.LayoutParams listviewParams = new LinearLayout.LayoutParams( 
                                LinearLayout.LayoutParams.FILL_PARENT, 
                                LinearLayout.LayoutParams.FILL_PARENT); 
                // 当滑动列表上,默认显示的黑色 
                mListView.setCacheColorHint(Color.WHITE); 
                // 将列表添加到流式布局myListViewlayout中 
                myListViewlayout.addView(mListView, listviewParams); 

                FillListData(); 

                // 列表现的单机事件 
                mListView.setOnItemClickListener(new OnItemClickListener() { 

                        @Override
                        public void onItemClick(AdapterView<?> arg0, View arg1, 
                                        int position, long id) { 
                                /* 
                                 * 点击列表项时触发onItemClick方法,四个参数含义分别为 
                                 * arg0:发生单击事件的AdapterView 
                                 * arg1:AdapterView中被点击的View  
                                 * position:当前点击的行在adapter的下标 
                                 * id:当前点击的行的id 
                                 */ 
                                Toast.makeText(ListOnLongClickActivity.this, 
                                                "您选择的是" + list.get(position).get("name").toString(), 
                                                Toast.LENGTH_SHORT).show(); 
                        } 
                }); 

                /** 
                 * Item 长按方式弹出菜单多选方式1 
                 * Item 长按方式弹出菜单多选方式2 
                 * ItemOnLongClick1()与ItemOnLongClick2()不共存,按实际需要选择 
                 */
        //        ItemOnLongClick1(); 
                ItemOnLongClick2(); 
        } 

        // 填充ListView资源 
        private void FillListData() { 

                adapter = new SimpleAdapter(ListOnLongClickActivity.this, 
                                getListData(), R.layout.listviewrow, new String[] { "name", 
                                                "price" }, new int[] { R.id.tv_name, R.id.tv_price }); 
                mListView.setAdapter(adapter); 
        } 

        private List<Map<String, Object>> getListData() { 

                Map<String, Object> _map = new HashMap<String, Object>(); 
                _map.put("name", "小米"); 
                _map.put("price", "2350元"); 
                list.add(_map); 

                _map = new HashMap<String, Object>(); 
                _map.put("name", "HTC G18"); 
                _map.put("price", "3340元"); 
                list.add(_map); 

                _map = new HashMap<String, Object>(); 
                _map.put("name", "iphone 5"); 
                _map.put("price", "5450元"); 
                list.add(_map); 

                _map = new HashMap<String, Object>(); 
                _map.put("name", "iPhone 4S"); 
                _map.put("price", "4650元"); 
                list.add(_map); 

                _map = new HashMap<String, Object>(); 
                _map.put("name", "MOTO ME525"); 
                _map.put("price", "1345元"); 
                list.add(_map); 
                return list; 

        } 

        private void ItemOnLongClick1() { 
//注:setOnCreateContextMenuListener是与下面onContextItemSelected配套使用的 
                mListView 
                                .setOnCreateContextMenuListener(new OnCreateContextMenuListener() { 

                                        public void onCreateContextMenu(ContextMenu menu, View v, 
                                                        ContextMenuInfo menuInfo) { 
                                                menu.add(0, 0, 0, "购买"); 
                                                menu.add(0, 1, 0, "收藏"); 
                                                menu.add(0, 2, 0, "对比"); 

                                        } 
                                }); 
        } 

        // 长按菜单响应函数 
        public boolean onContextItemSelected(MenuItem item) { 

                AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item 
                                .getMenuInfo(); 
                MID = (int) info.id;// 这里的info.id对应的就是数据库中_id的值 

                switch (item.getItemId()) { 
                case 0: 
                        // 添加操作 
                        Toast.makeText(ListOnLongClickActivity.this, 
                                        "添加", 
                                        Toast.LENGTH_SHORT).show(); 
                        break; 

                case 1: 
                        // 删除操作 
                        break; 

                case 2: 
                        // 删除ALL操作 
                        break; 

                default: 
                        break; 
                } 

                return super.onContextItemSelected(item); 

        } 

        private void ItemOnLongClick2() { 
                mListView.setOnItemLongClickListener(new OnItemLongClickListener() { 

                        @Override
                        public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
                                        final int arg2, long arg3) { 
                                list.remove(arg2); 
                                new AlertDialog.Builder(ListOnLongClickActivity.this) 
                                                .setTitle("对Item进行操作") 
                                                .setItems(R.array.arrcontent, 
                                                                new DialogInterface.OnClickListener() { 
                                                                        public void onClick(DialogInterface dialog, 
                                                                                        int which) { 
                                                                                String[] PK = getResources() 
                                                                                                .getStringArray( 
                                                                                                                R.array.arrcontent); 
                                                                                Toast.makeText( 
                                                                                                ListOnLongClickActivity.this, 
                                                                                                PK[which], Toast.LENGTH_LONG) 
                                                                                                .show(); 
                                                                                if (PK[which].equals("删除")) { 
                                                                                        // 按照这种方式做删除操作,这个if内的代码有bug,实际代码中按需操作 
                                                                                        list.remove(arg2); 
                                                                                        adapter = (SimpleAdapter) mListView 
                                                                                                        .getAdapter(); 
                                                                                        if (!adapter.isEmpty()) { 
                                                                                                adapter.notifyDataSetChanged(); // 实现数据的实时刷新 
                                                                                        } 
                                                                                } 
                                                                        } 
                                                                }) 
                                                .setNegativeButton("取消", 
                                                                new DialogInterface.OnClickListener() { 
                                                                        public void onClick(DialogInterface dialog, 
                                                                                        int which) { 
                                                                                // TODO Auto-generated method stub 

                                                                        } 
                                                                }).show(); 
                                return true; 
                        } 
                }); 

        } 
}




-----------
listviewrow.xml

代码片段, <?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/listviewbg"
    android:orientation="vertical" > 

    <TextView 
        android:id="@+id/tv_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="@android:color/black" /> 

    <TextView 
        android:id="@+id/tv_price"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="@android:color/black" /> 

</LinearLayout>
posted @ 2013-08-09 10:29  Andye  阅读(33278)  评论(0编辑  收藏  举报