3

在我的 Android 应用程序中,我已将一些图像和数据从 Internet 加载到可扩展的列表视图中。我已按如下方式处理方向更改。

@Override
public Object onRetainNonConfigurationInstance() {
    isOrentationChnged=true; 
    final Object data = arrGroupelements;
    return data;

}

在我的 onCreate()

     if(!isOrentationChnged){
    new LongRunning().execute();

}else{

      if((String[][])getLastNonConfigurationInstance()==null){
        new LongRunning().execute();
      }else{
    arrGroupelements= (String[][]) getLastNonConfigurationInstance();
    expList.setAdapter(new ExpAdapter(cont));
      }
}

isOrentationChnged=false;

LongRunning 是一个用于从 Internet 获取数据的 AsynacTask,它在方向更改后加载先前加载的数据(不再从 Internet 获取新数据),但速度非常慢。有没有其他方法可以有效地做到这一点?

4

2 回答 2

3

最后,我得到了加快活动方向变化的简单方法。

主意:

每个方向更改都会重新创建活动,解决此问题您可以通过在应用程序清单文件上的活动标记中添加以下代码行来避免活动重新创建。

android:configChanges="orientation|keyboardHidden|screenSize"

上一行避免在方向更改后重新进行活动,因此您的活动将对方向更改更敏感。

于 2013-06-05T11:54:48.373 回答
0

根据大卫,除非 isOrentationChnged设置为静态,否则在重新创建您的 Activity 时它将始终为 false。

无论如何,您实际上并不需要该变量,只需在 onCreate 中执行此操作:

arrGroupelements = (String[][]) getLastNonConfigurationInstance();
if (null==arrGroupelements){
  new LongRunning().execute();
} else {     
  expList.setAdapter(new ExpAdapter(cont));
}

这样,如果正在重新创建活动,则将使用您的数据,否则将运行长时间运行的操作。

顺便说一句,我没有看到您在 Adapter 构造函数中使用 arrGroupelements 。

于 2012-03-25T08:14:20.793 回答