【问题标题】:Android: Show spinner at actionbar with fixed titleAndroid:在带有固定标题的操作栏上显示微调器
【发布时间】:2015-04-17 12:54:09
【问题描述】:

我希望在操作栏中有一个微调器,显示标题Options总是,无论选择了哪一个。

此时上方的框一被选中就会显示所选择的选项。

我怎样才能做到这一点?

这是我的代码

        MenuItem menuItem = menu.findItem(R.id.actionbar_nextevents);
        if (menuItem!=null){
            Spinner spinner = (Spinner) MenuItemCompat.getActionView(menuItem);
            List<String> list = new ArrayList<String>();
            list.add("Option 1");
            list.add("Option 2");
            list.add("Option 3");
            spinner.setAdapter(new ArrayAdapter<String>(this, R.layout.listitem_nextevents, R.id.option, list));
        }

【问题讨论】:

  • 覆盖 onSpinnerItemSelected。在选择项目时,将 Spinner 的标题设置为“选项”
  • 那么上面的代码发生了什么?

标签: android android-actionbar android-spinner


【解决方案1】:

你试过了吗:

    MenuItem menuItem = menu.findItem(R.id.actionbar_nextevents);
if (menuItem != null) {
    Spinner spinner = (Spinner) MenuItemCompat.getActionView(menuItem);
    List<String> list = new ArrayList<String>();
    list.add("Options ");
    list.add("Option 1");
    list.add("Option 2");
    list.add("Option 3");
    spinner.setAdapter(new ArrayAdapter<String>(this,
            R.layout.listitem_nextevents, R.id.option, list));
    spinner.setSelection(0);
}

【讨论】:

    【解决方案2】:

    试试下面的代码

    打开 menu.xml 并粘贴下面的代码

    <item
            android:title="select city"
            android:id="@+id/my_menu_spinner"
            yourapp:actionViewClass="android.widget.Spinner"
            yourapp:showAsAction="ifRoom"/>
    

    在您的活动类中重写 onCreateOptionMenu() 方法并编写以下代码

     @Override
        public boolean onCreateOptionsMenu(Menu menu) {
    
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.main, menu);
            spinner = (Spinner) menu.findItem(R.id.my_menu_spinner)
                    .getActionView(); // find the spinner
                citieslist.add(cityName);
            }
    
            ArrayAdapter mSpinnerAdapter = new ArrayAdapter<String>(
                    this.getSupportActionBar().getThemedContext(),                         R.layout.spinner_item, citieslist);
            mSpinnerAdapter
                    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinner.setAdapter(mSpinnerAdapter);
    return true
    

    }

    在布局中创建文件 spinne_item.xml 并粘贴以下代码

    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="top"
        android:singleLine="true"
        android:textColor="#455560" />
    

    【讨论】:

    • 您是否尝试过运行此代码?你在它自己的初始化语句中使用一个变量,甚至在它存在之前。 -1。此外,当我运行这段代码时,MenuItem.getActionView() 会抛出 NullPointerException。
    【解决方案3】:

    迟到的回复给还在苦苦挣扎的人!

    微调器的第一个选项应该是您的标题! 那么当您处理每个选项时,只需将此行放在末尾即可。spinner.setSelection(0); 每次选择一个选项时,这都会使标题成为第一个选项

    示例:

    switch (position) {
                    case 0:
                       //my other methods and...
    
                        spinner.setSelection(0);
                        break;
    
                    case 1:
                        //my other methods and...
    
                        spinner.setSelection(0);
                        break;
                    case 2:
                        //my other methods and...
    
                        spinner.setSelection(0);
                        break;
    

    【讨论】: