机器人: 我想创建一个从ActionBar触发的Spinner。 我使用以下代码。 我看到的是,在初始化时,菜单项0(没有点击)运行。 我还看到选择另一个菜单项1不起作用。 以下代码有什么问题?
我在代码中本地化了两个问题:
Res / menu / main.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_spinner1"
android:showAsAction="always"
android:orderInCategory="1"
android:actionViewClass="android.widget.Spinner">
</item>
MainActivity中的代码:
public boolean onCreateOptionsMenu(Menu menu) {
String[] spinnerEntries = new String[]{ "Item-1", "Item-2", "Item-3"};
MenuInflater mi=getMenuInflater();
mi.inflate( R.menu.main, menu);
mSpinnerItem1 = menu.findItem( R.id.menu_spinner1);
View view1 = mSpinnerItem1.getActionView();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, spinnerEntries);
adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item);
if (view1 instanceof Spinner) {
final Spinner spinner = (Spinner) view1;
spinner.setAdapter( adapter);
spinner.setPopupBackgroundResource(R.drawable.spinner);
spinner.setOnItemSelectedListener( new OnItemSelectedListener() {
@Override
public void onItemSelected( AdapterView<?> arg0, View arg1, int arg2, long arg3) {
switch( arg2) {
case 0:
// Problem 1:
// first this code is executed before any click happened
//
// Problem 2:
// then ... the code is executed only after I clicked first
// on item-2 or item-3 and then to item-1
break;
case 1:
// code for option 2 etc.
}
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
}
return true;
}
答案 0 :(得分:1)
首先,
当您将Adapter
设置为Spinner
并且Spinner
被添加到窗口时(添加到ActionBar
),Spinner
将选择第一项{来自View
的{1}}(在适配器中其位置为零)并调用Adapter
(无论您选择与否,都会先从OnItemSelectedListener
收到回调,Spinner会选择)。< / p>
第二,
如果您从先前已选择的Spinner
中选择了该项,那么您将无法从Spinner
收到OnItemSelectedListener
回调...