android:configChanges =“orientation”不能使用片段

我只是想适应HoneyComb的一些应用程序。

我正面临的问题是我的方向改变(景观/肖像)活动的破坏

当我使用经典活动时,我在清单中写道:

但现在,所有这些线路都不再工作了!

有没有解决方法?

我的代码:

<activity android:name=".TwitterActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation" /> <activity android:name=".TwitterActivity$AppListFragment" android:configChanges="keyboardHidden|orientation" /> 

根据我对Honeycomb 3.0和兼容性库(r1)的经验。

configChange="orientation"与片段一起工作,以防止在方向更改时重新创build活动(应用该活动)。 如果你不想在重新创build活动时重新创build这个fragment ,那么在onCreate调用setRetainInstance

除非我失去了一些东西,我不完全得到你的第二个清单条目,不是AppListFragment Fragment ? 如果是这样,为什么它被列为清单中的条目?

看到这个答案新的限定符,这可能是造成这个,如果你是目标sdk 13,build议尝试android:configChanges="orientation|screenSize"

我有一个非常类似的问题,但不得不做一些补充,以使其与各种版本(包括ICS)工作。

在主要的应用程序活动中,我添加了Jason提供的稍微不同的版本。

 <activity android:name=".MyMainActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:label="@string/app_name" > 

我曾经在Honeycomb上工作过:

  <activity .... android:configChanges="orientation|keyboardHidden" .... > 

我不得不做第一个例子,让它在所有版本上运行。 我目前正在使用片段和ActionBarSherlock向后兼容。

我也改变了我保存和重新加载的方式:

  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Set up webview object View v = inflater.inflate(R.layout.webview_layout, container, false); webview = (WebView)v.findViewById(R.id.webview_fragment); webview.getSettings().setJavaScriptEnabled(true); // Check to see if it has been saved and restore it if true if(savedInstanceState != null) { if (savedInstanceState.isEmpty()) Log.i(tag, "Can't restore state because bundle is empty."); else { if (webview.restoreState(savedInstanceState) == null) Log.i(tag, "Restoring state FAILED!"); else Log.i(tag, "Restoring state succeeded."); } } else { // Load web page webview.setWebViewClient(new MyWebViewClient()); webview.getSettings().setPluginsEnabled(true); webview.getSettings().setBuiltInZoomControls(false); webview.getSettings().setSupportZoom(false); webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); webview.getSettings().setAllowFileAccess(true); webview.getSettings().setDomStorageEnabled(true); webview.loadUrl(mTabURL); } return v; } 

保存实例状态方法的代码:

  @Override public void onSaveInstanceState(Bundle outState) { if(webview.saveState(outState) == null) Log.i(tag,"Saving state FAILED!"); else Log.i(tag, "Saving state succeeded."); } 

希望这可以帮助。

直到API 13,configChanges属性screenSize都有了新的值

所以,如果你使用大屏幕,请确保在你的configChanges属性中添加screenSize:

  android:configChanges="orientation|keyboardHidden|screenSize" 

从Android 3.2(API级别13)开始,当设备在纵向和横向之间切换时,“屏幕大小”也会改变。 因此,如果要在API级别13或更高级别(由minSdkVersion和targetSdkVersion属性声明)开发时防止因方向更改而导致运行时重新启动,则除了“方向”值之外,还必须包含“screenSize”值。 也就是说,你必须decalare android:configChanges =“orientation | screenSize”。 但是,如果您的应用程序的目标级别为12或更低,那么您的活动始终会自行处理此configuration更改(即使在Android 3.2或更高版本的设备上运行,此configuration更改也不会重新启动您的活动)。

即使没有碎片,我也遇到了同样的问题(即,重新启动活动)。

我变了:

 android:configChanges="orientation|keyboardHidden" 

至:

 android:configChanges="orientation|keyboardHidden|screenSize" 

这阻止了活动重新启动。

我知道这是相当晚的答案,但我最近面临这个问题,并能够解决这个片段活动。

1)在清单中,

  android:configChanges="orientation|keyboardHidden|screenSize" 

2)在Class文件中,重写onSaveInstanceState(Bundle outState)。 而已! 请享用 :)

在Manifest文件中,里面的活动添加这一行
android:configChanges =“keyboard | keyboardHidden | orientation | screenSize”。