You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中Dialog内实现合规人数计数器(Java)功能求助

解决方案

以下是修复并实现需求的完整代码:

pax.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Dialog dialog = new Dialog(getContext());
        dialog.setContentView(R.layout.add_pax);
        dialog.show();

        // 初始化计数器,成人默认至少为1
        int adultCount = 1;
        int childCount = 0;
        int infantCount = 0;

        EditText adultfinalCount = dialog.findViewById(R.id.adultCount);
        EditText childfinalCount = dialog.findViewById(R.id.childCount);
        EditText infantfinalCount = dialog.findViewById(R.id.infantCount);

        Button adultPlus = dialog.findViewById(R.id.adultPos);
        Button adultMinus = dialog.findViewById(R.id.adultNeg);
        Button childPlus = dialog.findViewById(R.id.childPos);
        Button childMinus = dialog.findViewById(R.id.childNeg);
        Button infantPlus = dialog.findViewById(R.id.infantPos);
        Button infantMinus = dialog.findViewById(R.id.infantNeg);
        Button savebtn = dialog.findViewById(R.id.saveBtn);

        // 初始化显示状态
        adultfinalCount.setText(String.valueOf(adultCount));
        childfinalCount.setText(String.valueOf(childCount));
        infantfinalCount.setText(String.valueOf(infantCount));
        // 初始禁用儿童、婴儿控件(成人数量为1)
        updateChildInfantStatus(adultCount, childfinalCount, childPlus, childMinus, infantfinalCount, infantPlus, infantMinus);

        // 成人加按钮逻辑:上限9
        adultPlus.setOnClickListener(v1 -> {
            if (adultCount < 9) {
                adultCount++;
                adultfinalCount.setText(String.valueOf(adultCount));
                updateChildInfantStatus(adultCount, childfinalCount, childPlus, childMinus, infantfinalCount, infantPlus, infantMinus);
            }
        });

        // 成人减按钮逻辑:下限1
        adultMinus.setOnClickListener(v1 -> {
            if (adultCount > 1) {
                adultCount--;
                adultfinalCount.setText(String.valueOf(adultCount));
                updateChildInfantStatus(adultCount, childfinalCount, childPlus, childMinus, infantfinalCount, infantPlus, infantMinus);
            }
        });

        // 儿童加按钮逻辑
        childPlus.setOnClickListener(v1 -> {
            childCount++;
            childfinalCount.setText(String.valueOf(childCount));
        });

        // 儿童减按钮逻辑:下限0
        childMinus.setOnClickListener(v1 -> {
            if (childCount > 0) {
                childCount--;
                childfinalCount.setText(String.valueOf(childCount));
            }
        });

        // 婴儿加按钮逻辑
        infantPlus.setOnClickListener(v1 -> {
            infantCount++;
            infantfinalCount.setText(String.valueOf(infantCount));
        });

        // 婴儿减按钮逻辑:下限0
        infantMinus.setOnClickListener(v1 -> {
            if (infantCount > 0) {
                infantCount--;
                infantfinalCount.setText(String.valueOf(infantCount));
            }
        });

        savebtn.setOnClickListener(v1 -> {
            // 可在此添加计数保存逻辑,比如将值同步到外部变量
            // adultCounter[0] = adultCount;
            dialog.dismiss();
        });
    }

    // 统一更新儿童、婴儿控件的启用状态
    private void updateChildInfantStatus(int adultCount, EditText childEt, Button childPlus, Button childMinus, EditText infantEt, Button infantPlus, Button infantMinus) {
        boolean isEnabled = adultCount > 1;
        childEt.setEnabled(isEnabled);
        childPlus.setEnabled(isEnabled);
        childMinus.setEnabled(isEnabled);
        infantEt.setEnabled(isEnabled);
        infantPlus.setEnabled(isEnabled);
        infantMinus.setEnabled(isEnabled);
    }
});

核心修改说明

  • 计数范围控制:成人计数限制在1-9之间,加减操作时判断边界值,避免超出需求范围
  • 控件联动逻辑:通过updateChildInfantStatus方法统一处理,当成人数量大于1时启用儿童、婴儿的所有计数控件,否则禁用
  • 完整加减实现:补全所有按钮的点击事件,儿童、婴儿计数不会小于0
  • 初始化状态:成人默认设为1,初始状态下直接禁用儿童、婴儿控件,符合需求逻辑

内容的提问来源于stack exchange,提问作者CTOFlyFar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:35:31