您好,登錄后才能下訂單哦!
要實現Spinner選項的分組折疊與展開,可以通過自定義Spinner的適配器(Adapter)來實現。以下是一個簡單的示例:
public class GroupItem {
private String groupName;
private List<String> childItems;
public GroupItem(String groupName, List<String> childItems) {
this.groupName = groupName;
this.childItems = childItems;
}
public String getGroupName() {
return groupName;
}
public List<String> getChildItems() {
return childItems;
}
}
public class CustomSpinnerAdapter extends BaseAdapter {
private List<GroupItem> groupItems;
private Context context;
public CustomSpinnerAdapter(Context context, List<GroupItem> groupItems) {
this.context = context;
this.groupItems = groupItems;
}
@Override
public int getCount() {
int count = 0;
for (GroupItem groupItem : groupItems) {
count += groupItem.getChildItems().size() + 1; // 計算每個分組下的選項數量,并加上分組頭部
}
return count;
}
@Override
public Object getItem(int position) {
int count = 0;
for (GroupItem groupItem : groupItems) {
int groupSize = groupItem.getChildItems().size() + 1;
if (position < count + groupSize) {
if (position == count) {
return groupItem.getGroupName(); // 返回分組頭部
} else {
return groupItem.getChildItems().get(position - count - 1); // 返回選項內容
}
}
count += groupSize;
}
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = new TextView(context);
textView.setPadding(20, 10, 20, 10);
Object item = getItem(position);
if (item instanceof String) {
// 顯示選項內容
textView.setText((String) item);
} else if (item instanceof String) {
// 顯示分組頭部
textView.setText((String) item);
textView.setBackgroundColor(Color.GRAY);
}
return textView;
}
}
public class MainActivity extends AppCompatActivity {
private Spinner spinner;
private List<GroupItem> groupItems;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner = findViewById(R.id.spinner);
initData();
CustomSpinnerAdapter adapter = new CustomSpinnerAdapter(this, groupItems);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Object item = adapter.getItem(position);
if (item instanceof String) {
// 處理選項點擊事件
String selectedItem = (String) item;
Toast.makeText(MainActivity.this, selectedItem, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
private void initData() {
groupItems = new ArrayList<>();
List<String> group1Items = new ArrayList<>();
group1Items.add("Option 1");
group1Items.add("Option 2");
groupItems.add(new GroupItem("Group 1", group1Items));
List<String> group2Items = new ArrayList<>();
group2Items.add("Option 3");
group2Items.add("Option 4");
groupItems.add(new GroupItem("Group 2", group2Items));
}
}
通過以上步驟,可以實現Spinner選項的分組折疊與展開功能。在自定義的適配器中,根據位置判斷是分組頭部還是選項內容,并在getView方法中設置不同的UI樣式。在Activity中根據選中的位置處理相應的邏輯。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。