2012-05-18 42 views
0

在我的Activity中我有两个Gallery项目ExpandableListViewExpandableListView的子项我有GridView。程序运行完美。我需要的是处理方位变化。我知道,当方向改变时,活动将调用onDestroy,之后onCreate。因为我的ExpandableListView会崩溃,即使用户在他完成方向更改之前已经展开。当Android中发生旋转变化时,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> 

回答

1

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

编辑:如果你的目标API等级13,你必须与orientation选项添加screenSize选项将android:configChanges结合如在规定的documentation

屏幕方向发生了变化 - 用户已经旋转了该装置。

注意:如果您的应用程序面向API级别13或更高(如通过中的minSdkVersion和targetSdkVersion属性声明 ),那么你应该 还申报“屏幕尺寸”的配置,因为它也改变 当肖像之间的设备切换和风景取向。

+0

在我的AndroidManifest中,我声明了'android:configChanges =“keyboardHidden | orientation | screenLayout',但它不会帮助我解决问题,是的,我已经阅读了文档并知道必须将前一个实例保存为对象并在onCreate()再次加载时返回,但在我的情况下,我可以声明为Object,因为我填充了两个Gallery项目,一个ExpandableListView和两个GridViews如果我创建一个Object来保存我的最后一个实例我应该保存什么? – AnujAroshA

+0

我不明白。你可以重述一下吗?你是否告诉我添加android:configChanges =“keyboardHidden | orientation | screenLayout”会重新创建你的活动?它会从onCreate重新启动吗? – Blackbelt

+0

是的,它再次从onCreate()方法中调用。我可以看到它注销。在你的评论之后,我已经覆盖了'onConfigurationChanged'方法并调用Log.d()方法。它甚至不在Log中打印。 – AnujAroshA

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,则可以保存该包。

+0

首先,你的代码中有一个简单的语法错误,那里的StackOverflow人不允许我编辑那个小错误:-)关于你的回答,你有什么建议我把在捆绑?获取数据不是问题。我想加载用户之前在方向发生之前停留的相同位置。举个例子;在方向更改之前,用户可以停留在Gallery的第23项,并在ExpandableListView中打开第5组。我想加载相同的界面。谢谢 – AnujAroshA

+0

@AnujaPiyadigama编辑也许这是你需要的,否则我不会知道。 – mariomario

相关问题