0

这类问题会定期出现。抱歉,如果之前已经介绍过,但我是新手,找不到合适的答案。它处理类和活动之间通信的正确实现。

我做了一个画廊应用程序。它有 3 个主要活动:Main一个,使用模式搜索文件名;一个Thumb,将与模式匹配的所有图像显示为网格视图中的缩略图,以及一个Photo活动,当您单击Thumbs. 我通过文件名(一个数组)和网格视图中单击的拇指的(一个)传递给Photo活动。Intentpositionint

这第三个Photo活动只有一个视图: a TouchImageView,我根据您在图像上的短按位置(左、右或中间)调整了上一个/下一个切换和缩放。此外,我添加了一个 longclick 监听器Photo来显示 EXIF 信息。

事情正在工作,但我对实施不满意......有些事情不对。

我遇到的问题之一是,如果我单击图像右侧以查看Photo活动中的下一个,它会正常切换 ( position++),但是在旋转设备时会position出现原始设备。

正在发生的事情是Photo在旋转图像时被破坏,并且由于某种原因它再次重新启动,而不服从super.onCreate(savedInstanceState),再次加载 Extras(position唯一更改Photo,而不是父活动)。

我尝试使用startActivityForResult而不是startActivity,但失败了......

当然,我可以做一些人为的事情来保存position数据,但是应该有一些我不了解活动如何工作的“概念性”,我想正确地做到这一点。

有人可以解释一下我做错了什么,这是实现我想要的最佳方法,为什么?

非常感谢!!!

4

1 回答 1

3

试试这个代码来存储活动的值

Long value;

protected void onSaveInstanceState(Bundle onOrientChange) {
    super.onSaveInstanceState(onOrientChange);
    onOrientChange.putLong("myValue", value);  
}

并恢复 onCreate() 中的值:

public void onCreate(Bundle onOrientChange) {
  if (onOrientChange!= null){
   value = onOrientChange.getLong("myValue");
  }
}

通常你恢复你的状态在onCreate(). 也可以恢复它onRestoreInstanceState(),但不是很常见。(onRestoreInstanceState()在之后调用onStart(),而onCreate()在之前调用onStart()

使用 put 方法将值存储在onSaveInstanceState()

于 2012-12-16T21:46:31.610 回答