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

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

原文地址:https://www.cnblogs.com/moka/p/3080345.html