Android开发:Spinner如何绑定ID与标题,点击获取双值仅显标题
解决Spinner绑定ID与标题并同时获取的问题
要实现点击Spinner选项时同时拿到自定义ID和标题,核心思路是用一个数据模型类封装ID和标题,而不是直接用String列表。这样既能让Spinner显示标题,又能在点击时获取完整的对象信息。下面针对你使用的SpinnerDialog给出具体实现步骤:
1. 创建数据模型类
首先定义一个SpinnerItem类,用来存储每个选项的ID和标题,并重写toString()方法(让SpinnerDialog自动显示标题文本):
public class SpinnerItem { private int itemId; private String itemTitle; // 构造方法 public SpinnerItem(int itemId, String itemTitle) { this.itemId = itemId; this.itemTitle = itemTitle; } // Getter方法,用于获取ID和标题 public int getItemId() { return itemId; } public String getItemTitle() { return itemTitle; } // 重写toString,SpinnerDialog会用这个方法的返回值作为显示文本 @Override public String toString() { return itemTitle; } }
2. 替换原有的String列表为SpinnerItem列表
把你原来的ArrayList<String>改成ArrayList<SpinnerItem>,并在初始化时添加带自定义ID的项:
// 替换原来的ArrayList<String>为ArrayList<SpinnerItem> ArrayList<SpinnerItem> items = new ArrayList<>(); SpinnerDialog spinnerDialog; ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_drawer_menu); initItems(); // 初始化SpinnerDialog,传入SpinnerItem列表(因为重写了toString,会显示标题) spinnerDialog = new SpinnerDialog(DrawerMenu.this, items, "Select Item"); // 修改点击事件逻辑,获取ID和标题 spinnerDialog.bindOnSpinerListener(new OnSpinerItemClick() { @Override public void onClick(String itemText, int position) { // 通过position从列表中拿到对应的SpinnerItem对象 SpinnerItem selectedItem = items.get(position); int selectedId = selectedItem.getItemId(); String selectedTitle = selectedItem.getItemTitle(); // 这里就可以同时使用ID和标题了 Toast.makeText(DrawerMenu.this, "选中:ID=" + selectedId + ",标题=" + selectedTitle, Toast.LENGTH_SHORT).show(); } }); imageView = findViewById(R.id.search_Quali); imageView.setOnClickListener(v -> spinnerDialog.showSpinerDialog()); } private void initItems() { for(int i=0;i<100;i++) { // 这里的ID可以是你自定义的(比如从数据库、接口获取的真实ID),这里用i+1作为示例 items.add(new SpinnerItem(i+1, "Item"+(i+1))); } }
关键说明
- 重写
SpinnerItem的toString()是核心:SpinnerDialog默认会调用列表中对象的toString()方法来显示文本,所以我们返回标题就能实现只显示标题的需求。 - 通过
position获取对象:点击事件里的position对应列表中的索引,直接从ArrayList中取出SpinnerItem,就能拿到对应的ID和标题。
如果后续你切换到原生Spinner,思路也是完全一致的——用自定义数据类封装信息,配合ArrayAdapter使用即可。
内容的提问来源于stack exchange,提问作者ejobbox
相关产品推荐
相关产品推荐

