android:configChanges=“orientation”不适用于片段

h9a6wy2h  于 2023-03-21  发布在  Android
关注(0)|答案(7)|浏览(182)

我只是想让我的一些应用程序适应HoneyComb。
我面临的问题是方向变化(横向/纵向)活动的破坏
当我使用经典Activity时,我在清单中写道:
但是现在,所有的电话都不通了!
有解决办法吗?
我的代码:

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

    <activity android:name=".TwitterActivity$AppListFragment"
    android:configChanges="keyboardHidden|orientation"  />
apeeds0o

apeeds0o1#

将此添加到Manifesta.xml

<android:configChanges="orientation|screenSize" >

它为你工作。

hrirmatl

hrirmatl2#

根据我使用Honeycomb 3.0和兼容性库(r1)的经验。
configChange="orientation"确实可以处理片段,以防止Activity(应用片段的Activity)在方向更改时重新创建。如果不希望在Activity重新创建时重新创建fragment,请在onCreate中调用setRetainInstance
除非我错过了什么,否则我不太明白你的第二个清单条目,AppListFragment不是Fragment吗?如果是这样,为什么它在你的清单中被列为一个条目?
请参见SO Answer以了解可能导致此问题的新限定符。如果您的目标是sdk 13,建议尝试android:configChanges="orientation|screenSize"

ylamdve6

ylamdve63#

我有一个非常类似的问题,但不得不做了几个补充,让它与各种版本(包括ICS)。
在主应用程序活动中,我添加了一个与Jason提供的版本略有不同的版本。

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

我在Hive前使用了以下工具:

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

我不得不做第一个例子来让它在所有版本上运行。我目前正在使用fragments和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.");      
    }

希望这个有用。

mbjcgjjk

mbjcgjjk4#

在API 13之前,configChanges属性有一个新值screenSize
因此,如果您使用的是大屏幕,请确保在configChanges属性中添加screenSize:

android:configChanges="orientation|keyboardHidden|screenSize"
jdzmm42g

jdzmm42g5#

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

android:configChanges="orientation|keyboardHidden"

致:

android:configChanges="orientation|keyboardHidden|screenSize"

阻止活动重新开始。

gupuwyp2

gupuwyp26#

我知道这是一个很晚的答案,但我最近遇到了这个问题,并能够解决这个片段活动。
1)在清单中,

android:configChanges="orientation|keyboardHidden|screenSize"

2)在类文件中,重写onSaveInstanceState(Bundle outState).就是这样!

w7t8yxp5

w7t8yxp57#

在清单文件中,在活动内添加此行

android:configChanges="keyboard|keyboardHidden|orientation|screenSize"

相关问题