Waz*_*_Be 59 android restart android-fragments android-activity
我只是想让我的一些应用程序适应HoneyComb.
我面临的问题是我的方向变化活动被破坏(风景/肖像)
当我使用经典活动时,我在清单中写道:
但现在,所有这些线路都不再起作用了!
有解决方法吗?
我的代码:
<activity android:name=".TwitterActivity" android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation" />
<activity android:name=".TwitterActivity$AppListFragment"
android:configChanges="keyboardHidden|orientation" />
Run Code Online (Sandbox Code Playgroud)
PJL*_*PJL 78
基于我对Honeycomb 3.0和兼容性库(r1)的经验.
configChange="orientation"
确实可以使用片段来防止在方向更改时重新创建活动(应用它).如果你想fragment
不放在活动的再创造再创造,然后调用setRetainInstance
在onCreate
.
除非我失去了一些东西我不太让你的第二个清单项,是不是AppListFragment
一个Fragment
?如果是,那么为什么它被列为清单中的条目?
如果您要定位sdk 13,请参阅SO答案以了解可能导致此问题的新限定符,建议尝试android:configChanges="orientation|screenSize"
Jus*_*ain 37
我有一个非常类似的问题,但不得不做几个补充,以使其与各种版本(包括ICS)一起工作.
在主应用程序活动中,我添加了一个与Jason提供的略有不同的版本.
<activity
android:name=".MyMainActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name" >
Run Code Online (Sandbox Code Playgroud)
我有这个工作在前蜂窝与:
<activity
....
android:configChanges="orientation|keyboardHidden"
.... >
Run Code Online (Sandbox Code Playgroud)
我必须制作第一个示例才能让它在所有版本上运行.我目前正在使用片段和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;
}
Run Code Online (Sandbox Code Playgroud)
save实例状态方法的代码:
@Override
public void onSaveInstanceState(Bundle outState)
{
if(webview.saveState(outState) == null)
Log.i(tag,"Saving state FAILED!");
else
Log.i(tag, "Saving state succeeded.");
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
小智 34
在API 13之前,configChanges属性有了一个新值, screenSize
因此,如果您使用大屏幕,请确保在configChanges属性中添加screenSize:
android:configChanges="orientation|keyboardHidden|screenSize"
Run Code Online (Sandbox Code Playgroud)
从Android 3.2(API级别13)开始,当设备在纵向和横向之间切换时,"屏幕尺寸"也会发生变化.因此,如果要在开发API级别13或更高级别(由minSdkVersion和targetSdkVersion属性声明)时由于方向更改而阻止运行时重新启动,则除了"orientation"值之外,还必须包含"screenSize"值.也就是说,你必须decalare android:configChanges ="orientation | screenSize".但是,如果您的应用程序的目标是API级别12或更低,那么您的活动始终会自行处理此配置更改(即使在Android 3.2或更高版本的设备上运行,此配置更改也不会重新启动您的活动).
小智 5
即使没有碎片,我也遇到了同样的问题(即活动重新启动)。
我变了:
android:configChanges="orientation|keyboardHidden"
Run Code Online (Sandbox Code Playgroud)
到:
android:configChanges="orientation|keyboardHidden|screenSize"
Run Code Online (Sandbox Code Playgroud)
这会阻止活动重新启动。
归档时间: |
|
查看次数: |
66778 次 |
最近记录: |