转自:http://www.cnblogs.com/yejiurui/p/3247527.html
package com.wyl.download_demo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.graphics.Color; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.MenuItem; import android.view.View; import android.view.View.OnCreateContextMenuListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; /** * 知识点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:
1 代码片段, <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:background="@drawable/listviewbg" 6 android:orientation="vertical" > 7 8 <TextView 9 android:id="@+id/tv_name" 10 android:layout_width="fill_parent" 11 android:layout_height="wrap_content" 12 android:textColor="@android:color/black" /> 13 14 <TextView 15 android:id="@+id/tv_price" 16 android:layout_width="fill_parent" 17 android:layout_height="wrap_content" 18 android:textColor="@android:color/black" /> 19 20 </LinearLayout>