在Android中发生轮换更改时,ExpandableListView会崩溃

时间:2012-05-18 08:51:13

标签: android rotation expandablelistview

在我的Activity我有两个Gallery个项ExpandableListView,而ExpandableListView的孩子我有一个GridView。程序运行完美。我需要的是处理方向变化。我知道,当方向更改时,活动会调用onDestroy,然后调用onCreate。因此,即使用户在完成方向更改之前已展开,我的ExpandableListView也会崩溃。

我发现了一个很好的概念来处理StackOverflow中的旋转变化。这是link。我试图以这种方式实施,但我失败了。

我需要的是即使在方向改变发生之后,也要采用用户在方向改变之前使用的相同界面。请指导我。

使用清单内容进行更新

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >

    <activity 
        android:name=".activities.HomeActivity"  
        android:configChanges="keyboardHidden|orientation|screenLayout" >       

        <intent-filter>
            <action android:name="android.intent.action.MAIN" ></action>
            <category android:name="android.intent.category.LAUNCHER" ></category>
        </intent-filter>            
    </activity>

    <activity 
        android:name=".activities.WebViewActivity"
        android:configChanges="keyboardHidden|orientation|screenLayout" >          
    </activity>

</application>

2 个答案:

答案 0 :(得分:1)

处理旋转可能很简单,取决于屏幕旋转时您必须做出的反应。如果您没有特别要做的事情,您可以随时告诉Android自己管理轮换,并避免重新启动activity。这可以通过在AndroidManifest.xml android:configChanges="orientation"中声明来实现。如果您这样做,Android会拨打onConfigurationChanged,您可以随时override。如果希望在屏幕旋转时重新启动活动,则必须保存当前状态。也就是说,在您的情况下,当前groupschildren可能会崩溃并重新崩溃。您可以使用onSavedInstanceState()/onRestoreInstanceState()来保存和恢复所需的状态。

修改:如果您要定位API级别13,则必须将screenSize选项与android:configChanges选项一起添加orientation选项,如documentation中所述:

  

屏幕方向已更改 - 用户已旋转设备。

     

注意:如果您的应用程序的目标是API等级13或更高(如声明的那样)   通过minSdkVersion和targetSdkVersion属性),那么你应该   还声明了“screenSize”配置,因为它也会发生变化   当设备在纵向和横向之间切换时。

答案 1 :(得分:0)

为什么不把这些东西捆绑在一起。

您将状态放在onDestroy函数的bundle中,然后在onCreate函数中读取该包。

onDestroy()
{
 Bundle extras = intent.getExtras();
extras.putInt("group", 5);
extras.putInt("item", 23);
}

onCreate()
{
 Bundle extras = getIntent().getExtras();
 int item= extras.getInt("item");
 int group= extras.getInt("group");
}

如果ExpandableListView已展开,可以保存捆绑包。