Android:actionbar触发微调器问题

时间:2013-12-29 12:37:51

标签: android android-actionbar android-spinner

机器人: 我想创建一个从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;
} 

1 个答案:

答案 0 :(得分:1)

首先,

当您将Adapter设置为Spinner并且Spinner被添加到窗口时(添加到ActionBar),Spinner将选择第一项{来自View的{​​1}}(在适配器中其位置为零)并调用Adapter(无论您选择与否,都会先从OnItemSelectedListener收到回调,Spinner会选择)。< / p>

第二,

如果您从先前已选择的Spinner中选择了该项,那么您将无法从Spinner收到OnItemSelectedListener回调...