【问题标题】:Multiple spinners in ActionBarActionBar 中的多个微调器
【发布时间】:2013-04-14 19:50:22
【问题描述】:

我使用 ActionBarSherlock,其中我将导航模式设置为“列表”

getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
getSupportActionBar().setListNavigationCallbacks(adapter, this);

是否可以根据选择的项目动态显示第二个微调器?

【问题讨论】:

    标签: android spinner android-spinner


    【解决方案1】:

    使用自定义操作栏布局。

    actionBar.setDisplayShowCustomEnabled(true);
    actionBar.setCustomView(R.layout.action_bar_custom);
    

    action_bar_custom.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
    
        <Spinner
            android:id="@+id/action_bar_spinner_collection"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
        </Spinner>
    
        <Spinner
            android:id="@+id/action_bar_spinner_collection_detail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
        </Spinner>
    
    </LinearLayout>
    

    【讨论】:

      【解决方案2】:

      使用这个..这可能有效...

      代码:

      getMenuInflater().inflate( R.menu.main, menu );
      mSpinnerItem = menu.findItem( R.id.menu_spinner );
      setupSpinner( mSpinnerItem ); 
      

      菜单 XML:

       <item
          android:id="@+id/menu_spinner"
          android:actionViewClass="android.widget.Spinner"
          android:visible="false"
          android:showAsAction="always"/>
      

      【讨论】:

        【解决方案3】:

        切勿使用 NAVIGATION_MODE_LIST 和 onNavigationItemSelected 不值得!

             @Override
             public boolean onNavigationItemSelected(int position, long itemId)
        
            You also cannot use menu's to do this:
        
           @Override public boolean onCreateOptionsMenu(Menu menu)
          {
            getMenuInflater().inflate(R.menu.activity_main, menu);
        
        due to inflation ordering.
        

        原因:

        (1) 它会生成一个“隐藏的”微调器,您无法获得它的 id。 (2) 你不能自定义这个微调器 (3) 节省 30 行代码,但如果要添加第二个双向微调器,则永久受限 (4)即使在“简单代码”(一个微调器)的特殊情况下,你也会失去很多。 (5) 你不能使用标签。 关键是 actionBar.setCustomView(R.layout.action_bar_custom); 和 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()... 对于每个微调器。

        相信我,我在尝试每个解决方案时都浪费了好几个小时。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多