/** * 知識點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>