以编程方式创建的微调器无法打开

Posted

技术标签:

【中文标题】以编程方式创建的微调器无法打开【英文标题】:Programmatically created spinner doesn't open 【发布时间】:2014-04-29 13:04:42 【问题描述】:

我以编程方式创建了一个微调器:

ArrayAdapter<ServiceObject> medicineArrayAdapter = new ArrayAdapter<ServiceObject>(MedicineActivity.this, android.R.layout.simple_spinner_dropdown_item, medicines);
medicineArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

Spinner spinner = new Spinner(MedicineActivity.this, getSpinnerAttrs(), 0);
spinner.setAdapter(medicineArrayAdapter);
spinner.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));

spinner.setVisibility(View.VISIBLE);
buttonLayout.addView(spinner, index);

getSpinnerAttrs() 的位置:

AttributeSet as = null;
Resources r = getResources();
XmlResourceParser parser = r.getLayout(R.layout.fragment_medicine);

int state = 0;
do 
    try 
        state = parser.next();
     catch (XmlPullParserException xppe) 
        xppe.printStackTrace();
     catch (IOException ioe) 
        ioe.printStackTrace();
    
    if (state == XmlPullParser.START_TAG) 
        if (parser.getName().equals("Spinner")) 
            as = Xml.asAttributeSet(parser);
            break;
        
    
 while(state != XmlPullParser.END_DOCUMENT);

return as;

fragment_medicine 中的 Spinner 是:

<Spinner
    android:layout_
    android:layout_
    android:background="@android:drawable/btn_dropdown"
    android:spinnerMode="dropdown"
    android:visibility="invisible"/>
    />

正常显示,但是点击后打不开。 . .

【问题讨论】:

你能检查药物数组是否为空吗? @tasomaniac 已经满了,从spinner的选中项中可以看到 【参考方案1】:

最后我以另一种方式做到了。

我只是以编程方式添加了属性,而没有像这样从 xml 文件中读取它们:

spinner.setBackgroundResource(android.R.drawable.btn_dropdown);

而且效果很好。

【讨论】:

以上是关于以编程方式创建的微调器无法打开的主要内容,如果未能解决你的问题,请参考以下文章

不可能让我的 DatePickerDialog 以编程方式使用微调器样式

magnific popup:以编程方式将内容从弹出表单更改为模态微调器,然后返回表单

以编程方式设置微调器的选定项

无法在 setTimeout 回调中以编程方式打开 Vuetify 对话框

在 iOS 14 中以编程方式打开 UIDatePicker

无法看到控制器以编程方式快速添加到 UITabBar