zoukankan      html  css  js  c++  java
  • Android ListView两种长按弹出菜单方式

    转自: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>
  • 相关阅读:
    DOM
    ES6的export和import
    JavaScript:Location
    垃圾回收机制之一:标记删除算法
    KnockoutJS:
    package.json
    2016/7/27
    requirejs:研究笔记
    postmessage/cors跨域postMessage、xhr2和xmldomain
    javascript:算法之数组sort排序
  • 原文地址:https://www.cnblogs.com/Sunnor/p/4846870.html
Copyright © 2011-2022 走看看