ActionBar集成Spinner时Activity出现两个Spinner的问题求助
Hey there! Let's figure out why you're seeing two Spinners in your Activity even though you only coded one for the ActionBar. This is a common gotcha, so here are the most likely causes and fixes to check:
Common Causes & Fixes
1. You added a Spinner in both your menu layout AND Activity layout
This is the most frequent culprit. It’s easy to accidentally define a Spinner for the ActionBar in your res/menu/[your-menu].xml file, then also drop a <Spinner> widget into your Activity’s layout file (like activity_main.xml). One shows up in the ActionBar, the other in your content area—and if your content layout starts right below the ActionBar, they might look like they’re both part of the bar.
Fix:
- Open your Activity’s layout XML file and scan for any extra
<Spinner>tags you didn’t intend. Delete the one that isn’t meant for the ActionBar.
2. Your Android theme includes a default ActionBar dropdown that conflicts with your custom Spinner
Some stock Android themes (like Theme.Holo.Light.DarkActionBar or certain AppCompat variants) come with a built-in dropdown control in the ActionBar. If you add your own custom Spinner on top of that, you’ll end up with two.
Fix:
Option 1: Switch to a theme that doesn’t include a default dropdown. For example, if you’re using Material Components, use Theme.MaterialComponents.DayNight.NoActionBar, then implement a custom Toolbar with your Spinner inside it.
Option 2: Disable the theme’s default dropdown by adding this to your app’s theme in styles.xml:
<item name="android:actionBarWidgetTheme">@style/NoDefaultSpinner</item>
Then define the corresponding style:
<style name="NoDefaultSpinner" parent="@android:style/Theme.Holo.Light"> <item name="android:spinnerItemStyle">@null</item> </style>
3. You’re accidentally initializing the Spinner multiple times in code
Double-check your Activity’s onCreateOptionsMenu method. If you’re calling menuInflater.inflate() multiple times, or repeatedly setting the ActionBar’s navigation mode + Spinner adapter, you’ll end up with duplicate Spinners.
Fix:
Ensure you only set up the ActionBar Spinner once. Here’s a safe way to do it:
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu only once getMenuInflater().inflate(R.menu.your_menu_file, menu); ActionBar actionBar = getSupportActionBar(); if (actionBar != null && actionBar.getNavigationMode() != ActionBar.NAVIGATION_MODE_LIST) { // Set up the Spinner only if it hasn't been initialized yet actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, yourSpinnerItemList); actionBar.setListNavigationCallbacks(spinnerAdapter, this); } return true; }
4. Your menu layout has two Spinner items
It’s easy to accidentally duplicate the <item> tag for your Spinner in the menu XML. Check if you have two entries that use android:actionViewClass="android.widget.Spinner".
Fix:
Open your menu layout file and delete the duplicate <item> tag. For example, remove the second entry here:
<!-- Keep this one --> <item android:id="@+id/action_spinner" android:actionViewClass="android.widget.Spinner" android:showAsAction="always"/> <!-- Delete this duplicate --> <item android:id="@+id/action_spinner_duplicate" android:actionViewClass="android.widget.Spinner" android:showAsAction="always"/>
If none of these fix the issue, share snippets of your menu layout, Activity code, and Activity layout file—we can pinpoint the exact problem then!
内容的提问来源于stack exchange,提问作者Aadit Kolar

