在Android中,要實現Spinner選項分組顯示,可以通過創建一個自定義的適配器(Adapter)來實現。這個適配器需要繼承自BaseAdapter,并重寫其中的方法,如getCount()、getItem()、getItemId()和getView()。以下是一個簡單的示例:
List<Map<String, Object>> groupedData = new ArrayList<>();
Map<String, Object> group1 = new HashMap<>();
group1.put("name", "分組1");
group1.put("items", Arrays.asList("選項1-1", "選項1-2", "選項1-3"));
groupedData.add(group1);
Map<String, Object> group2 = new HashMap<>();
group2.put("name", "分組2");
group2.put("items", Arrays.asList("選項2-1", "選項2-2", "選項2-3"));
groupedData.add(group2);
public class GroupedSpinnerAdapter extends BaseAdapter {
private List<Map<String, Object>> groupedData;
private Context context;
public GroupedSpinnerAdapter(Context context, List<Map<String, Object>> groupedData) {
this.context = context;
this.groupedData = groupedData;
}
@Override
public int getCount() {
return groupedData.size();
}
@Override
public Object getItem(int position) {
return groupedData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.spinner_item, parent, false);
}
TextView groupTextView = convertView.findViewById(R.id.group_text_view);
List<String> items = (List<String>) groupedData.get(position).get("items");
groupTextView.setText(items.get(0));
Spinner spinner = convertView.findViewById(R.id.spinner);
ArrayAdapter<String> itemAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, items);
itemAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(itemAdapter);
return convertView;
}
}
在這個適配器中,我們使用了一個簡單的布局文件spinner_item.xml來顯示每個分組的名稱和一個Spinner。分組的名稱顯示在TextView中,而子選項則顯示在嵌套的Spinner中。
Spinner spinner = findViewById(R.id.spinner);
GroupedSpinnerAdapter adapter = new GroupedSpinnerAdapter(this, groupedData);
spinner.setAdapter(adapter);
現在,你的Spinner應該能夠以分組的方式顯示選項了。請注意,這個示例僅用于演示目的,你可能需要根據實際需求對其進行調整。