Android spinner如何處理選項(xiàng)分組

小樊
81
2024-10-12 10:14:09

在Android中,要對(duì)Spinner的選項(xiàng)進(jìn)行分組,你可以使用ArrayAdapter結(jié)合自定義布局來(lái)實(shí)現(xiàn)。以下是一個(gè)簡(jiǎn)單的示例,展示了如何對(duì)Spinner的選項(xiàng)進(jìn)行分組:

  1. 首先,創(chuàng)建一個(gè)布局文件(例如:spinner_item_group.xml),用于顯示每個(gè)分組項(xiàng)。這個(gè)布局可以包含一個(gè)TextView來(lái)顯示分組名稱,以及其他子項(xiàng)的布局。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="8dp">

    <TextView
        android:id="@+id/group_title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textAppearance="?android:attr/textAppearanceListItemSmall"
        android:gravity="center_vertical"
        android:textColor="@color/black" />
</LinearLayout>
  1. 創(chuàng)建一個(gè)布局文件(例如:spinner_item.xml),用于顯示每個(gè)分組內(nèi)的子項(xiàng)。
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/spinner_item"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:padding="8dp" />
  1. 在你的Activity或Fragment中,創(chuàng)建一個(gè)數(shù)據(jù)源來(lái)存儲(chǔ)分組信息和子項(xiàng)信息。
List<Map<String, Object>> groupedData = new ArrayList<>();

Map<String, Object> group1 = new HashMap<>();
group1.put("title", "Group 1");
group1.put("items", Arrays.asList("Item 1.1", "Item 1.2", "Item 1.3"));
groupedData.add(group1);

Map<String, Object> group2 = new HashMap<>();
group2.put("title", "Group 2");
group2.put("items", Arrays.asList("Item 2.1", "Item 2.2"));
groupedData.add(group2);

// 更多分組...
  1. 創(chuàng)建一個(gè)自定義的ArrayAdapter來(lái)綁定分組數(shù)據(jù)和子項(xiàng)布局。
public class GroupedArrayAdapter extends ArrayAdapter<Map<String, Object>> {

    public GroupedArrayAdapter(@NonNull Context context, int resource, @NonNull List<Map<String, Object>> objects) {
        super(context, resource, objects);
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        if (position == 0) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.spinner_item_group, parent, false);
            TextView groupTitle = convertView.findViewById(R.id.group_title);
            groupTitle.setText((String) getItem(position).get("title"));
        } else {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.spinner_item, parent, false);
            TextView spinnerItem = convertView.findViewById(R.id.spinner_item);
            spinnerItem.setText((String) getItem(position - 1).get("items").get(0));
        }
        return convertView;
    }

    @Override
    public int getCount() {
        return getItemCount() + 1;
    }
}
  1. 在你的Activity或Fragment中,使用自定義的GroupedArrayAdapter將分組數(shù)據(jù)綁定到Spinner。
Spinner spinner = findViewById(R.id.spinner);
GroupedArrayAdapter adapter = new GroupedArrayAdapter(this, R.layout.spinner_item_group, groupedData);
spinner.setAdapter(adapter);

現(xiàn)在,你的Spinner應(yīng)該能夠顯示分組選項(xiàng)和每個(gè)分組內(nèi)的子項(xiàng)。注意,這個(gè)示例僅用于演示目的,你可能需要根據(jù)你的需求進(jìn)行調(diào)整。

0