• Android网络编程之一个Android下菜单系统模块的实现(客户端—添单功能(中部))


    本篇来编写Activity中的操作,使用的仍然是OrderActivity。

    本次编写的功能比较多,主要是要用于选择菜品,数量等信息后,将其填入下方ListView中显示出来,ListView中已点菜品可删除,最后下单。

    OrderActivity准备各种组件等变量,绑定监听事件:

    public class OrderActivity extends Activity {
        
        // 主界面组件
        private Spinner tableNoSpinner = null;
        private EditText personNumEditText = null;
        private Button startBtn, addMealBtn, orderBtn;
        
        // 添菜功能弹出Dialog的自定义布局组件
        private Spinner dishNameSpinner = null;
        private EditText dishNumEditText = null;
        private EditText dishRemarkEditText = null;
        
        // 下方显示已添加菜品的ListView及其adapter与填充数据List
        private ListView orderDetailListView = null;
        private SimpleAdapter orderDetailAdapter = null;
        private List<Map<String, Object>> orderDetailList = new ArrayList<Map<String, Object>>();
    
        // 填充菜品下拉列表所需的数据
        private List<Map<String, Object>> dishes = null;
        private Map<String, Object> dish = null;
        
        // 声明此菜单所属的主order编号
        private String orderId = null;
        
        // 点击菜品下拉选单时返回的位置
        private int selectedPosition;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.order);
            
            tableNoSpinner = (Spinner) findViewById(R.id.tableNoSpinner);
            personNumEditText = (EditText) findViewById(R.id.personNumEditText);
            startBtn = (Button) findViewById(R.id.startBtn);
            addMealBtn = (Button) findViewById(R.id.addMealBtn);
            orderBtn = (Button) findViewById(R.id.orderBtn);
            orderDetailListView = (ListView) findViewById(R.id.orderDetailListView);
            
            startBtn.setOnClickListener(new StartBtnListener());
            addMealBtn.setOnClickListener(new AddMealBtnListener());
            orderBtn.setOnClickListener(new OrderBtnListener());
            
            
            // 给桌号下拉列表填值
            setTableNoSpinner();
            // 为了实现在添加菜品之后将其删除的功能,给orderDetailListView注册上下文菜单
            this.registerForContextMenu(orderDetailListView);
        }
            
        private class StartBtnListener implements OnClickListener {
            @Override
            public void onClick(View v) {
                // 调用开桌方法
                startOrder();
            }
        }
        
        private class AddMealBtnListener implements OnClickListener {
            @Override
            public void onClick(View v) {
                // 调用添菜功能
                addMeal();
            }
        }
        
        private class OrderBtnListener implements OnClickListener {
            @Override
            public void onClick(View v) {
                // 确认下单功能
                confirmDetails();
            }
        }
    View Code

    复写为了实现删除已点菜品功能的上下文菜单两个方法:

    /*
         * 给上下文菜单添加按钮
         */
        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            super.onCreateContextMenu(menu, v, menuInfo);
            menu.setHeaderTitle("操作选项");
            menu.add(Menu.NONE, Menu.FIRST + 1, 1, "删除");
        }
        
        /*
         * 实现删除已点菜品
         */
        @Override
        public boolean onContextItemSelected(MenuItem item) {
            // 将菜单信息作如下转型, 可获取所长按的ListView中元素position
            AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
            int position = info.position;
            // 判断点击了哪个操作选项
                    switch (item.getItemId()) {
                    case Menu.FIRST + 1:
                        // 从list中除去
                        this.orderDetailList.remove(position);
                        // 通知adapter进行改变
                        this.orderDetailAdapter.notifyDataSetChanged();
                        Toast.makeText(OrderActivity.this, "成功删除", Toast.LENGTH_SHORT).show();
                        break;
                    }
            return super.onContextItemSelected(item);
        }
    View Code

    开桌方法和填充桌号下拉列表方法在开桌功能篇中已经介绍,此处不再写出。

    实现添菜功能的方法与填充菜品下拉单的方法:

        /*
         * 实现添菜功能方法
         */
        private void addMeal() {
            // LayoutInflater将一个xml布局文件实例化为一个view对象
            LayoutInflater inflater = LayoutInflater.from(OrderActivity.this);
            View view = inflater.inflate(R.layout.order_detail, null)
                    ;
            // 实例化弹出dialog中所需的三个组件
            dishNameSpinner = (Spinner) view.findViewById(R.id.dishNameSpinner);
            dishNumEditText = (EditText) view.findViewById(R.id.dishNumEditText);
            dishRemarkEditText = (EditText) view.findViewById(R.id.remarkEditText);
            
            // 调用填充菜品下拉单方法
            setDishNameSpinner(dishNameSpinner);
            // 绑定监听事件,记录所选菜品位置
            dishNameSpinner.setOnItemSelectedListener(new ChooseDishListener());
            // 设置弹出Dialog
            Dialog dialog = new AlertDialog.Builder(OrderActivity.this)
                .setTitle("请点餐")
                // 设定自定义View
                .setView(view)
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // 填充下方ListView的具体实现方法
                        String dishName = OrderActivity.this.dishNameSpinner.getSelectedItem().toString();
                        String dishNum = OrderActivity.this.dishNumEditText.getText().toString();
                        String dishRemark = OrderActivity.this.dishRemarkEditText.getText().toString();
                        if (dishNum == null || dishNum.equals("")) {
                            Toast.makeText(OrderActivity.this, "请输入数量", Toast.LENGTH_SHORT).show();
                            return;
                        }
                        Map<String, Object> map = dishes.get(OrderActivity.this.selectedPosition);
                        map.put("dishName", dishName);
                        map.put("dishNum", dishNum);
                        map.put("dishRemark", dishRemark);
                        orderDetailList.add(map);
                        orderDetailAdapter = new SimpleAdapter(OrderActivity.this, 
                                orderDetailList, 
                                R.layout.order_detail_listview, 
                                new String[] {"dishName", "dishNum", "dishRemark"}, 
                                new int[] {R.id.dishNameText, R.id.dishNumText, R.id.dishRemarkText});
                        orderDetailListView.setAdapter(orderDetailAdapter);
                    }
                }).setNegativeButton("取消", null)
                .show();
        }
    View Code
    /*
         * 填充菜品下拉单的方法
         */
        private void setDishNameSpinner(Spinner dishNameSpinner) {
                    // 调用dishNameQuery获取结果集
                    Cursor result = dishNameQuery(null) ;
                    OrderActivity.this.startManagingCursor(result) ;    
                    dishes = new ArrayList<Map<String,Object>>() ;
                    for (result.moveToFirst(); !result.isAfterLast(); result.moveToNext()) {
                        dish = new HashMap<String,Object>() ;
                        dish.put("_id", result.getInt(0)) ;
                        dish.put("price", result.getInt(1)) ;
                        dish.put("typeId", result.getInt(2)) ;
                        dish.put("name", result.getString(3)) ;
                        dish.put("pic", result.getString(4)) ;
                        dish.put("remark", result.getString(5)) ;
                        dishes.add(dish) ;
                    }
                    List<String> dishNameList = new ArrayList<String>();
                    for (int i = 0; i < dishes.size(); i++) {
                        Map<String,Object> dish = dishes.get(i);
                        dishNameList.add(dish.get("name") + ": ¥" + dish.get("price"));
                    }
                    ArrayAdapter<String> adapter = new ArrayAdapter<String>(OrderActivity.this, android.R.layout.simple_spinner_item, dishNameList);
                    dishNameSpinner.setAdapter(adapter);
        }
        
        private Cursor dishNameQuery(String id) {
            if(id == null || "".equals(id)) {
                return super.getContentResolver().query(Menus.CONTENT_URI, null, null, null, Menus.SORT_ORDER);
            } else {
                return super.getContentResolver().query(Uri.withAppendedPath(Menus.CONTENT_URI,id), null, null, null, Menus.SORT_ORDER);
            }
        }
    View Code

    菜品下拉单的绑定方法(记录所选菜品位置):

        /*
         * 菜品下拉单的绑定方法
         */
        private class ChooseDishListener implements OnItemSelectedListener {
    
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position,
                    long id) {
                // 记录所选位置
                OrderActivity.this.selectedPosition = position;
            }
            
            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
            }
            
        }
    View Code

    至此,添单功能已经编写完毕,效果如下:

  • 相关阅读:
    bzoj3530 [SDOI2014]数数
    bzoj3940 Censoring
    线性代数基础
    hdu1085 Holding Bin-Laden Captive!
    hdu1028 Ignatius and the Princess III
    luogu2000 拯救世界
    博弈论入门
    树hash
    luogu2173 [ZJOI2012]网络
    luogu1501 [国家集训队]Tree II
  • 原文地址:https://www.cnblogs.com/moka/p/3080345.html
Copyright © 2020-2023  润新知