如何在Android Fragment中批量获取多个Spinner的选中值?
完全可以通过循环批量处理这些Spinner,不需要逐个声明独立变量,下面提供两种常用的实现方案:
方案1:按ID命名规则动态查找
适合ID命名固定有规律的场景,通过系统API动态生成资源ID后批量查找:
// 用于存储所有Spinner实例,后续操作直接取列表内元素即可 List<Spinner> spinnerList = new ArrayList<>(); for (int i = 1; i <= 12; i++) { // 按照命名规则动态生成Spinner的资源ID int resId = getResources().getIdentifier( "spinnerP" + i + "Type", "id", requireContext().getPackageName() ); Spinner spinner = requireView().findViewById(resId); spinnerList.add(spinner); }
注意:如果项目开启了资源混淆压缩,需要给这部分Spinner的ID添加keep规则,避免动态获取ID失败。
方案2:遍历父布局查找所有Spinner
如果当前页面确实没有其他Spinner,不需要关心ID命名,直接遍历父布局下的所有子View筛选即可:
List<Spinner> spinnerList = new ArrayList<>(); // 替换为你这些Spinner所在的父布局的ID ViewGroup parent = requireView().findViewById(R.id.你的父布局ID); for (int i = 0; i < parent.getChildCount(); i++) { View child = parent.getChildAt(i); if (child instanceof Spinner) { spinnerList.add((Spinner) child); } }
如果Spinner嵌套在多层子布局内,写个简单的递归遍历逻辑就能全部查出来。
后续你需要获取Spinner选中值、设置监听等操作,直接遍历spinnerList或者按索引取对应位置的Spinner即可,不需要再单独维护12个独立变量。
内容的提问来源于stack exchange,提问作者E_Blue
相关产品推荐
相关产品推荐

