我有几个微调器,我为其创建了自定义 ArrayAdapter,因此我可以更改下拉菜单的外观。我想根据下拉列表所属的微调器来操纵 View 。我以为我可以做类似 parent.getTag() 的事情,但它返回 null。
自定义数组适配器如下所示:
class BackgroundColorAdapter extends ArrayAdapter<String> {
BackgroundColorAdapter() {
super(SettingsActivity.this, R.layout.settings_spinner_item, R.id.item_text, textColors);
}
public View getDropDownView (int position, View convertView, ViewGroup parent){
View row=super.getView(position, convertView, parent);
if(parent.getTag().equals("background"){
//Do custom stuff here
}
return(row);
}
}
我正在设置标签:
settingsSpinner.setTag("bg_color_spinner");
settingsSpinner.setAdapter(new BackgroundColorAdapter());
我想我对 View 层次结构的工作方式感到困惑,但微调器下拉列表的父级应该是微调器似乎是合乎逻辑的。任何人都知道如何在 getDropDownView 中找出下拉列表属于哪个微调器?
编辑:使 settingsSpinner 成为单个微调器而不是一组微调器,以减少混淆
最佳答案
最终使它起作用,例如,这里是更改下拉列表中每个项目的文本字体的代码。
class TextSizeAdapter extends ArrayAdapter<String> {
TextSizeAdapter() {
super(SettingsActivity.this, R.layout.settings_spinner_item, R.id.item_text, textSizes);
}
public View getDropDownView (int position, View convertView, ViewGroup parent){
View row=super.getView(position, convertView, parent);
TextView text = (TextView)row.findViewById(R.id.item_text);
text.setTextSize(TypedValue.COMPLEX_UNIT_PX,appState.FONTSIZES[position]);
RadioButton radio = (RadioButton)row.findViewById(R.id.item_radio);
if(settingsSpinners[2].getSelectedItemPosition() == position){
radio.setChecked(true);
}else{
radio.setChecked(false);
}
return(row);
}
}
关于android - 如何从android中的getDropDownView方法获取微调器ID或标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6831720/