上下文菜单ContextMenu

Res目录下menu下创建listview_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/add"
        android:title="增加"/>
    <item
        android:id="@+id/delete"
        android:title="删除"/>
    <item
        android:id="@+id/update"
        android:title="修改"/>
    <item
        android:id="@+id/select"
        android:title="查询"/>

</menu>


//ActivityMain逻辑


package com.bwei.day_10_contextmenu;


import java.util.ArrayList;
import java.util.List;

import com.bwei.day_10_contextmenu_adapter.MyAdapter;
import com.bwei.day_10_contextmenu_bean.Goods;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {
    public static String[] content = new String[] {
            "爱国者(aigo) MP5数码播放器U303 8GB 触摸屏幕MP3 白色",
            "雪曼2014新款女包OL职业单肩包 女手提包斜挎包包8305 米白色",
            "长袖连衣裙雪纺裙修身气质女欧美长款帝弗润驰森女拖地大牌仙长裙",
            "韩国文具 可爱 创意 时尚 办公用品 大 多功能 收纳盒 笔筒包邮",
            "ThinkPad E531 6885-D4C 赛扬双核 500G 联想 IBM商务 笔记本电脑",
            "现货包邮顺丰 Nokia/诺基亚 107 双卡双待 老人备用手机 超长待机",
            "3条装 北极绒吊带背心女打底 新款内搭黑色吊带 莫代尔蕾丝背心",
            "[标配送8G卡]Sony/索尼 HDR-CX240E 数码摄像机/DV高清专业摄像机",
            "天然白蓝绿玉髓水晶耳环男女925银耳钉黑玛瑙耳饰防过敏白银饰品",
            "2014韩版欧根纱连衣裙新款夏女刺绣公主蓬蓬裙粉红色假两件套270",
            "杭依阁2014夏装新款韩版修身淑女连衣裙女装蕾丝雪纺时尚连衣裙潮",
            "HP/惠普 Envy 15 Envy 15-j105TX 四代i7高分屏8G内存/1T/4G独显",
            "卡西欧CASIO时尚石英手表男士皮带手表MTP-1095Q-7B",
            "正版hellokitty公仔KT毛绒玩具凯蒂猫布娃娃玩偶七夕生日礼物女生", };
    public static String[] price = new String[] { "450", "1450", "150", "45",
            "3999", "99", "129", "4999", "899", "270", "298", "6999", "1299",
            "29", };
    public static int[] imageView = new int[] { R.drawable.mp4, R.drawable.bag,
            R.drawable.bqz, R.drawable.bt, R.drawable.ibm,
            R.drawable.nokia3310, R.drawable.dd, R.drawable.dv, R.drawable.eh,
            R.drawable.hqz, R.drawable.watch, R.drawable.wj, R.drawable.xk,
            R.drawable.xk };
    private List<Goods> list;
    private MyAdapter myAdapter;
    private EditText et;
    private int position;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setData();
        ListView listView = (ListView) findViewById(R.id.listView);

        et = (EditText) findViewById(R.id.et);

        button = (Button) findViewById(R.id.button);

        myAdapter = new MyAdapter(MainActivity.this, list);
        listView.setAdapter(myAdapter);
         // 给listView注册上下文菜单
        registerForContextMenu(listView);
    }

    // 创造上下文菜单
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
         // 得到menuInflater对象
        MenuInflater menuInflater = getMenuInflater();
        // 找到上下文菜单的布局文件
        menuInflater.inflate(R.menu.listview_menu, menu);

        super.onCreateContextMenu(menu, v, menuInfo);

    }     

    // 上下文菜单条目被点击时触发的方法

    @Override
    public boolean onContextItemSelected(MenuItem item) {

         AdapterContextMenuInfo contextMenuInfo = (AdapterContextMenuInfo) item.getMenuInfo();
        // 得到点击的listView的角标
        position = contextMenuInfo.position;
        // 获得上下文菜单被点击的条目id
        int itemId = item.getItemId();
        switch (itemId) {
        case R.id.add:
            Goods goods = new Goods();
            goods.setImage(R.drawable.ic_launcher);
            goods.setName("机器人");
            goods.setPrice("5000");
            // 向list集合指定位置添加数据
            list.add(position, goods);
            // 通知listView适配器重新加载数据
            myAdapter.notifyDataSetChanged();
            break;
        case R.id.delete:
            list.remove(position);
            myAdapter.notifyDataSetChanged();
            break;
        case R.id.update:
            // 显示控件
            button.setVisibility(View.VISIBLE);
            et.setVisibility(View.VISIBLE);

            break;
        case R.id.select:

            break;

        }

        return super.onContextItemSelected(item);
    }

    // button(确定)点击时的逻辑操作
    public void onClick(View v) {
        // 通过position,得到被点击的listView条目,所对应的list集合里的goods对象
        Goods goods = list.get(position);
        // 得到输入框的内容
        String price = et.getText().toString().trim();
        // 重新设置商品的价格
        goods.setPrice(price);

        myAdapter.notifyDataSetChanged();
        // 设置输入框的数据<这里有清空的效果
        et.setText("");
        // 隐藏控件
        et.setVisibility(View.INVISIBLE);
        // 隐藏控件
        button.setVisibility(View.INVISIBLE);

    }

    /**
     *
     */
    private void setData() {

        list = new ArrayList<Goods>();

        for (int i = 0; i < imageView.length; i++) {
            Goods goods = new Goods();
            goods.setImage(imageView[i]);
            goods.setName(content[i]);

            goods.setPrice(price[i]);

            list.add(goods);
        }

    }

    // 当上下文菜单关闭时调用的方法
    @Override
    public void onContextMenuClosed(Menu menu) {
        super.onContextMenuClosed(menu);

        Toast.makeText(MainActivity.this, "上下文菜单关闭了   ", 0).show();

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值