Android中点击控件移除String数组首个元素失效,求解决方案
Android点击控件后更新AutoCompleteTextView数据源问题
你遇到的问题有两个核心原因:
Skip(1).ToArray()是C# LINQ的语法,Android Java环境根本不支持这行代码,它连编译都通不过- 就算能生成新数组,你没有通知适配器数据源发生变化,AutoCompleteTextView的UI不会自动更新
解决方案(推荐用ArrayList实现)
把固定长度的数组换成ArrayList,它支持动态修改元素,再配合适配器的notifyDataSetChanged()方法就能实现需求:
AutoCompleteTextView aat_reason_not_presented; aat_reason_not_presented = findViewById(R.id.aat_reason_not_presented); // 用ArrayList替代数组,方便动态增删元素 ArrayList<String> reasonsList = new ArrayList<>(Arrays.asList( "Unclaimed", "Lost/Stolen", "Damaged/Defective", "Pawned", "Not Turned Over", "Others" )); ArrayAdapter<String> adapterYesNo = new ArrayAdapter<>( getApplicationContext(), android.R.layout.simple_spinner_item, reasonsList ); adapterYesNo.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); aat_reason_not_presented.setAdapter(adapterYesNo); aat_distribution_status.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View arg1, int pos, long id) { // 避免空列表报错,先判断列表不为空 if (!reasonsList.isEmpty()) { reasonsList.remove(0); // 移除首个元素 adapterYesNo.notifyDataSetChanged(); // 通知适配器更新UI } } });
如果坚持用数组实现(不推荐)
因为Java数组是固定长度的,必须创建新数组后重新设置适配器:
AutoCompleteTextView aat_reason_not_presented; aat_reason_not_presented = findViewById(R.id.aat_reason_not_presented); String[] Reasons = new String[]{"Unclaimed", "Lost/Stolen", "Damaged/Defective", "Pawned", "Not Turned Over", "Others"}; ArrayAdapter<String> adapterYesNo = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_item, Reasons); adapterYesNo.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); aat_reason_not_presented.setAdapter(adapterYesNo); aat_distribution_status.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View arg1, int pos, long id) { if (Reasons.length > 1) { // 创建长度减1的新数组 String[] newReasons = new String[Reasons.length - 1]; // 复制原数组从索引1开始的元素到新数组 System.arraycopy(Reasons, 1, newReasons, 0, newReasons.length); Reasons = newReasons; // 重新创建适配器并设置给控件 adapterYesNo = new ArrayAdapter<>( getApplicationContext(), android.R.layout.simple_spinner_item, Reasons ); adapterYesNo.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); aat_reason_not_presented.setAdapter(adapterYesNo); } } });
内容的提问来源于stack exchange,提问作者marivic valdehueza
相关产品推荐
相关产品推荐

