在Android操作栏中显示/隐藏项目(3.0+;)

在Android操作栏中显示/隐藏项目(3.0+;),android,android-actionbar,runtimeexception,Android,Android Actionbar,Runtimeexception,我正在使用内置的操作栏我希望在获取数据时在操作栏中显示动画加载程序,否则显示“刷新”图标。我发现的一个简单方法是使用两个菜单项,显示/隐藏其中一个,然后相反。这是我的菜单: <item android:id="@+id/menuItemRefresh" android:title="Refresh" android:showAsAction="always" android:icon="@drawable/ic_menu_refresh"

我正在使用内置的操作栏我希望在获取数据时在操作栏中显示动画加载程序,否则显示“刷新”图标。我发现的一个简单方法是使用两个菜单项,显示/隐藏其中一个,然后相反。这是我的菜单:

<item android:id="@+id/menuItemRefresh" 
      android:title="Refresh" 
      android:showAsAction="always" 
      android:icon="@drawable/ic_menu_refresh"
      android:visible="false" />
<item android:id="@+id/menuItemProgress"
      android:actionLayout="@layout/progress"
      android:showAsAction="always"
      android:visible="true" />

actionLayout(@+id/menuItemProgress)似乎是问题的原因。刷新项(@+id/menuItemRefresh)一切正常。我在问题所在的地方写了一条评论。当我注释掉行“问题:”时,旋转效果很好。

Android似乎无法恢复视图的保存状态

这是因为您有两个具有相同ID的视图。因为它们不属于同一类,所以强制转换失败并崩溃

<item android:id="@+id/menuItemRefresh" 

我也遇到了同样的问题,通过在
AndroidManifest.xml
中的活动声明中添加以下内容解决了这个问题:

android:configChanges="orientation|screenSize|keyboardHidden"

让我找到了解决办法。希望这能有所帮助。

请下次只发布必要的代码。这是一个很好的方法,您可以在这里处理同一菜单项上的进度/刷新。谢谢请注意,在Android 2.2上,当您隐藏进度条时,下次将其显示时,它不会动画
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.quanturium.androcloud/com.quanturium.androcloud.MainActivity}:
java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to
android.widget.ProgressBar$SavedState
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3347)
at android.app.ActivityThread.access$700(ActivityThread.java:122)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1150)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4340)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to
android.widget.ProgressBar$SavedState
at android.widget.ProgressBar.onRestoreInstanceState(ProgressBar.java:1093)
at android.view.View.dispatchRestoreInstanceState(View.java:9876)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2330)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2330)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2330)
at android.view.View.restoreHierarchyState(View.java:9854)
at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1625)
at android.app.Activity.onRestoreInstanceState(Activity.java:906)
at android.app.Activity.performRestoreInstanceState(Activity.java:878)
at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1100)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1933)
... 12 more
<item android:id="@+id/menuItemRefresh" 
<ProgressBar
       android:id="@+id/menuItemRefresh"
android:configChanges="orientation|screenSize|keyboardHidden"