关于一进入程序就自动执行Spinner的OnItemSelectedListener的问题解决办法

本文将介绍如何在Android应用中通过设置mySpinner.setSelection(0,true);来预设Spinner组件的选择默认值,避免自动执行OnItemSelectedListener()导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决办法就是添加一句话

 

mySpinner.setSelection(0, true);
 

这句话的作用是预设一个一开始的选择默认值。如果不设置的话,将会自动执行OnItemSelectedListener()

// AddInventoryFragment.java package com.example.kucun2.ui.jinhuo; import android.app.AlertDialog; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.Button; import android.widget.EditText; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Spinner; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import com.example.kucun2.DataPreserver.Data; import com.example.kucun2.R; import com.example.kucun2.entity.*; import com.example.kucun2.function.Adapter; import java.util.ArrayList; import java.util.Date; import java.util.List; public class AddInventoryFragment extends Fragment { // 视图组件 private Spinner spinnerDingdan, spinnerChanpin, spinnerZujian, spinnerBancai; private EditText etQuantity; private RadioGroup rgType; private Button btnNewDingdan, btnAddChanpin, btnAddZujian, btnSubmit; // 当前选择 private Dingdan selectedDingdan; private Chanpin selectedChanpin; private Zujian selectedZujian; private Bancai selectedBancai; // 数据列表 private List<Dingdan> dingdanList; private List<Chanpin> chanpinList; private List<Zujian> zujianList; private List<Bancai> bancaiList; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_add_inventory, container, false); initViews(view); initData(); setupSpinners(); setupListeners(); return view; } private void initViews(View view) { spinnerDingdan = view.findViewById(R.id.spinner_dingdan); spinnerChanpin = view.findViewById(R.id.spinner_chanpin); spinnerZujian = view.findViewById(R.id.spinner_zujian); spinnerBancai = view.findViewById(R.id.spinner_bancai); etQuantity = view.findViewById(R.id.et_shuliang); rgType = view.findViewById(R.id.rg_type); btnNewDingdan = view.findViewById(R.id.btn_new_dingdan); btnAddChanpin = view.findViewById(R.id.btn_add_chanpin); btnAddZujian = view.findViewById(R.id.btn_add_zujian); btnSubmit = view.findViewById(R.id.btn_submit); } private void initData() { // 从全局数据获取列表 dingdanList = Data.dingdans().getViewList(); chanpinList = Data.chanpins().getViewList(); zujianList = Data.zujians().getViewList(); bancaiList = Data.bancais().getViewList(); } private void setupSpinners() { // 设置订单下拉框 Adapter.setupDingdanSpinner(spinnerDingdan, dingdanList, requireContext()); // 设置产品下拉框(初始为所有产品) Adapter.setupChanpinSpinner(spinnerChanpin, chanpinList, requireContext()); // 设置组件下拉框(初始为所有组件) Adapter.setupZujianSpinner(spinnerZujian, zujianList, requireContext()); // 设置板材下拉框(初始为所有板材) Adapter.setupBancaiSpinners(spinnerBancai, bancaiList, requireContext()); } private void setupListeners() { // 订单选择监听 spinnerDingdan.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { selectedDingdan = (Dingdan) parent.getItemAtPosition(position); updateChanpinSpinner(); } @Override public void onNothingSelected(AdapterView<?> parent) { selectedDingdan = null; updateChanpinSpinner(); } }); // 产品选择监听 spinnerChanpin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { selectedChanpin = (Chanpin) parent.getItemAtPosition(position); updateZujianSpinner(); } @Override public void onNothingSelected(AdapterView<?> parent) { selectedChanpin = null; updateZujianSpinner(); } }); // 组件选择监听 spinnerZujian.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { selectedZujian = (Zujian) parent.getItemAtPosition(position); updateBancaiSpinner(); } @Override public void onNothingSelected(AdapterView<?> parent) { selectedZujian = null; updateBancaiSpinner(); } }); // 新建订单 btnNewDingdan.setOnClickListener(v -> showNewDingdanDialog()); // 添加产品 btnAddChanpin.setOnClickListener(v -> showAddChanpinDialog()); // 添加组件 btnAddZujian.setOnClickListener(v -> showAddZujianDialog()); // 提交 btnSubmit.setOnClickListener(v -> submitInventory()); } // 更新产品列表(根据订单过滤) private void updateChanpinSpinner() { List<Chanpin> filtered = new ArrayList<>(); if (selectedDingdan != null) { // 获取订单关联的产品 for (Dingdan_Chanpin dc : selectedDingdan.getDingdanChanpin()) { filtered.add(dc.getChanpin()); } } else { filtered = chanpinList; } Adapter.setupChanpinSpinner(spinnerChanpin, filtered, requireContext()); } // 更新组件列表(根据产品过滤) private void updateZujianSpinner() { List<Zujian> filtered = new ArrayList<>(); if (selectedChanpin != null) { // 获取产品关联的组件 for (Chanpin_Zujian cz : selectedChanpin.getChanpinZujian()) { filtered.add(cz.getZujian()); } } else { filtered = zujianList; } Adapter.setupZujianSpinner(spinnerZujian, filtered, requireContext()); } // 更新板材列表(根据组件锁定) private void updateBancaiSpinner() { List<Bancai> filtered = new ArrayList<>(); if (selectedZujian != null && selectedChanpin != null) { // 查找组件关联的板材 for (Chanpin_Zujian cz : selectedChanpin.getChanpinZujian()) { if (cz.getZujian().equals(selectedZujian)) { filtered.add(cz.getBancai()); break; } } } else { filtered = bancaiList; } Adapter.setupBancaiSpinners(spinnerBancai, filtered, requireContext()); } // 显示新建订单对话框 private void showNewDingdanDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); View view = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_new_dingdan, null); EditText etNumber = view.findViewById(R.id.et_order_number); // 其他日期选择器等组件省略... builder.setView(view) .setTitle("新建订单") .setPositiveButton("保存", (dialog, which) -> { Dingdan newDingdan = new Dingdan(); newDingdan.setNumber(etNumber.getText().toString()); // 添加到全局数据 Data.add(newDingdan); // 刷新订单列表 dingdanList = Data.dingdans().getViewList(); Adapter.setupDingdanSpinner(spinnerDingdan, dingdanList, requireContext()); }) .setNegativeButton("取消", null) .show(); } // 显示添加产品对话框 private void showAddChanpinDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); View view = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_add_chanpin, null); Spinner spinner = view.findViewById(R.id.spinner_chanpin_selection); EditText etQuantity = view.findViewById(R.id.et_chanpin_quantity); Button btnNew = view.findViewById(R.id.btn_new_chanpin); // 设置产品列表(排除已关联的) List<Chanpin> available = new ArrayList<>(chanpinList); if (selectedDingdan != null) { for (Dingdan_Chanpin dc : selectedDingdan.getDingdanChanpin()) { available.remove(dc.getChanpin()); } } Adapter.setupChanpinSpinner(spinner, available, requireContext()); btnNew.setOnClickListener(v -> showNewChanpinDialog()); builder.setView(view) .setTitle("添加产品到订单") .setPositiveButton("添加", (dialog, which) -> { Chanpin selected = (Chanpin) spinner.getSelectedItem(); int quantity = Integer.parseInt(etQuantity.getText().toString()); // 创建订单-产品关联 Dingdan_Chanpin dc = new Dingdan_Chanpin(); dc.setDingdan(selectedDingdan); dc.setChanpin(selected); dc.setShuliang(quantity); // 添加到全局数据 Data.add(dc); // 刷新产品列表 updateChanpinSpinner(); }) .show(); } // 显示新建产品对话框 private void showNewChanpinDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); View view = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_new_chanpin, null); EditText etName = view.findViewById(R.id.et_chanpin_name); builder.setView(view) .setTitle("新建产品") .setPositiveButton("保存", (dialog, which) -> { Chanpin newChanpin = new Chanpin(); newChanpin.setBianhao(etName.getText().toString()); // 添加到全局数据 Data.add(newChanpin); // 刷新产品列表 chanpinList = Data.chanpins().getViewList(); Adapter.setupChanpinSpinner(spinnerChanpin, chanpinList, requireContext()); }) .setNegativeButton("取消", null) .show(); } // 显示添加组件对话框 private void showAddZujianDialog() { if (selectedChanpin == null) { Toast.makeText(requireContext(), "请先选择产品", Toast.LENGTH_SHORT).show(); return; } AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); View view = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_create_zujian_bancai, null); Spinner spinnerZujian = view.findViewById(R.id.et_zujian_name); // 注意布局中的ID Spinner spinnerBancai = view.findViewById(R.id.spinner_bancai); EditText etOneHowmany = view.findViewById(R.id.number_one_howmany); Button btnNewZujian = view.findViewById(R.id.btn_add_zujian); Button btnNewBancai = view.findViewById(R.id.btn_add_bancai); // 设置组件下拉框 Adapter.setupZujianSpinner(spinnerZujian, zujianList, requireContext()); // 设置板材下拉框 Adapter.setupBancaiSpinners(spinnerBancai, bancaiList, requireContext()); btnNewZujian.setOnClickListener(v -> showNewZujianDialog()); btnNewBancai.setOnClickListener(v -> showNewBancaiDialog()); builder.setView(view) .setTitle("添加组件到产品") .setPositiveButton("添加", (dialog, which) -> { Zujian zujian = (Zujian) spinnerZujian.getSelectedItem(); Bancai bancai = (Bancai) spinnerBancai.getSelectedItem(); double oneHowmany = Double.parseDouble(etOneHowmany.getText().toString()); // 创建产品-组件关联 Chanpin_Zujian cz = new Chanpin_Zujian(); cz.setChanpin(selectedChanpin); cz.setZujian(zujian); cz.setBancai(bancai); cz.setOne_howmany(oneHowmany); // 添加到全局数据 Data.add(cz); // 刷新组件列表 updateZujianSpinner(); }) .show(); } // 显示新建组件对话框 private void showNewZujianDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); View view = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_new_zujian, null); EditText etName = view.findViewById(R.id.et_zujian_name); builder.setView(view) .setTitle("新建组件") .setPositiveButton("保存", (dialog, which) -> { Zujian newZujian = new Zujian(); newZujian.setName(etName.getText().toString()); // 添加到全局数据 Data.add(newZujian); // 刷新组件列表 zujianList = Data.zujians().getViewList(); Adapter.setupZujianSpinner(spinnerZujian, zujianList, requireContext()); }) .setNegativeButton("取消", null) .show(); } // 显示新建板材对话框 private void showNewBancaiDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); View view = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_create_bancai, null); Spinner spinnerCaizhi = view.findViewById(R.id.spinner_caizhi); Spinner spinnerMupi1 = view.findViewById(R.id.spinner_mupi1); Spinner spinnerMupi2 = view.findViewById(R.id.spinner_mupi2); EditText etHoudu = view.findViewById(R.id.edittext_houdu); Button btnNewCaizhi = view.findViewById(R.id.btn_new_caizhi); Button btnNewMupi = view.findViewById(R.id.btn_new_mupi); // 设置材质下拉框 Adapter.setupCaizhiSpinner(spinnerCaizhi, Data.caizhis().getViewList(), requireContext()); // 设置木皮下拉框 Adapter.setupMupiSpinner(spinnerMupi1, Data.mupis().getViewList(), requireContext()); Adapter.setupMupiSpinner(spinnerMupi2, Data.mupis().getViewList(), requireContext()); btnNewCaizhi.setOnClickListener(v -> showNewCaizhiDialog()); btnNewMupi.setOnClickListener(v -> showNewMupiDialog()); builder.setView(view) .setTitle("新建板材") .setPositiveButton("保存", (dialog, which) -> { Caizhi caizhi = (Caizhi) spinnerCaizhi.getSelectedItem(); Mupi mupi1 = (Mupi) spinnerMupi1.getSelectedItem(); Mupi mupi2 = (Mupi) spinnerMupi2.getSelectedItem(); double houdu = Double.parseDouble(etHoudu.getText().toString()); Bancai newBancai = new Bancai(); newBancai.setCaizhi(caizhi); newBancai.setMupi1(mupi1); newBancai.setMupi2(mupi2); newBancai.setHoudu(houdu); // 添加到全局数据 Data.add(newBancai); // 刷新板材列表 bancaiList = Data.bancais().getViewList(); Adapter.setupBancaiSpinners(spinnerBancai, bancaiList, requireContext()); }) .setNegativeButton("取消", null) .show(); } // 显示新建材质对话框 private void showNewCaizhiDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); View view = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_new_caizhi, null); EditText etName = view.findViewById(R.id.et_caizhi_name); builder.setView(view) .setTitle("新建材质") .setPositiveButton("保存", (dialog, which) -> { Caizhi newCaizhi = new Caizhi(); newCaizhi.setName(etName.getText().toString()); // 添加到全局数据 Data.add(newCaizhi); // 刷新材质下拉框 Adapter.setupCaizhiSpinner(spinnerCaizhi, Data.caizhis().getViewList(), requireContext()); }) .setNegativeButton("取消", null) .show(); } // 显示新建木皮对话框 private void showNewMupiDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); View view = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_new_mupi, null); EditText etName = view.findViewById(R.id.et_mupi_name); RadioGroup rgFinish = view.findViewById(R.id.rg_finish); builder.setView(view) .setTitle("新建木皮") .setPositiveButton("保存", (dialog, which) -> { Mupi newMupi = new Mupi(); newMupi.setName(etName.getText().toString()); newMupi.setYou(rgFinish.getCheckedRadioButtonId() == R.id.rb_painted); // 添加到全局数据 Data.add(newMupi); // 刷新木皮下拉框 Adapter.setupMupiSpinner(spinnerMupi1, Data.mupis().getViewList(), requireContext()); Adapter.setupMupiSpinner(spinnerMupi2, Data.mupis().getViewList(), requireContext()); }) .setNegativeButton("取消", null) .show(); } // 提交库存记录 private void submitInventory() { // 获取数量 int quantity; try { quantity = Integer.parseInt(etQuantity.getText().toString()); } catch (NumberFormatException e) { Toast.makeText(requireContext(), "请入有效数量", Toast.LENGTH_SHORT).show(); return; } // 获取操作类型 boolean isJinhuo = rgType.getCheckedRadioButtonId() == R.id.rb_jinhuo; // 创建库存记录 Jinhuo record = new Jinhuo(); record.setShuliang(isJinhuo ? quantity : -quantity); // 正数为进货,负数为消耗 record.setDate(new Date()); // 设置关联关系 if (selectedBancai != null) { // 创建订单-板材关联(如果不存在) Dingdan_bancai db = createDingdanBancai(); record.setDingdan_bancai(db); } // 添加到全局数据 Data.add(record); Toast.makeText(requireContext(), "操作成功", Toast.LENGTH_SHORT).show(); resetForm(); } // 创建订单-板材关联 private Dingdan_bancai createDingdanBancai() { Dingdan_bancai db = new Dingdan_bancai(); // 设置关联对象 if (selectedDingdan != null) db.setDingdian(selectedDingdan); if (selectedChanpin != null) db.setChanoin(selectedChanpin); if (selectedZujian != null) db.setZujian(selectedZujian); if (selectedBancai != null) db.setBancai(selectedBancai); // 添加到全局数据 Data.add(db); return db; } // 重置表单 private void resetForm() { spinnerDingdan.setSelection(0); spinnerChanpin.setSelection(0); spinnerZujian.setSelection(0); spinnerBancai.setSelection(0); etQuantity.setText(""); rgType.check(R.id.rb_jinhuo); } } Adapter.setupCaizhiSpinner(spinnerCaizhi, Data.caizhis().getViewList(), requireContext());spinnerCaizhi根本没定义
最新发布
06-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值