问题标签 [android-savedstate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1397 浏览

android - 用相机拍照后无法恢复活动

我正在尝试进行一项活动,我可以使用相机或图库将图像上传到 imageView 中。
在我的平板电脑上它工作正常,但在我的 Galaxy s4 上,用相机拍照后我无法恢复活动。这是日志猫:

我读到这是因为使用相机会浪费大量内存,所以我必须使用 onSavedInstanceState 和 onRestoreInstanceState 但我不知道该怎么做。你能解释一下吗?这也是我活动的java代码:

先感谢您

0 投票
2 回答
37 浏览

android - 在应用重新启动时从一个活动中获取数据并存储在另一个活动中

我有一个游戏活动,用户通过单击按钮获得积分。我想做的是将这些点传递给主要活动,即用户看到的第一个活动。例如,用户进入游戏活动,获得一些积分并完全退出应用程序。当他们重新启动应用程序时,他们可以看到他们在主要活动中拥有的总点数。

我在主要活动中使用 startActivityForResults 从游戏活动中获取数据,但我遗漏了一些东西。我想我需要保存游戏活动中的积分,以便在重新启动应用程序时获得存储的积分。我是否朝着正确的方向前进?如果是这样,我该如何保存积分?

我的另一个想法是在游戏活动中,当用户获得积分时,积分会立即发送到主要活动并保存在那里。当用户重新启动应用程序时,主活动不需要去游戏活动来查找积分,它们将已经存储在主活动中。这种方式是一样的,更好还是更糟?

0 投票
1 回答
235 浏览

android - 如何将列表视图的所有内容保存在片段中?

我有一个片段,我在其中放置了一个从互联网获取其内容的列表视图,当我单击一行并返回列表视图时,它再次获取数据,但我想保持列表视图的最后状态,我该怎么做?

...

0 投票
0 回答
364 浏览

android - 恢复 Fragment 后 RecyclerView Adapter null

我在 ViewPager 中的片段中有一个 RecyclerView。问题是,当视图恢复时,RecyclerView 为空,我需要更新内容的适配器也为空。

如何保存适配器状态,使其在恢复 Fragment 时不为空?

代码

0 投票
2 回答
730 浏览

android - 在嵌套 Fragment 的 onActivityResult 中调用第二个 Intent 不会再次调用 onActivityResult

我在嵌套片段中调用相机意图,并在片段中的 onActivityResult 中获取图像,没有任何问题。当我想裁剪图像时,我在 onActivityResult 中调用(第二个)意图将图像传递给裁剪意图。但是,在这种情况下不会调用 onActivityResult(仅当应用程序在其中一个意图期间在后台终止时才相关)。

我在日志中找到了以下行:

这仅在调用裁剪意图时抛出 - 不是针对第一个相机意图。在调用第二个意图之前,我是否必须等待再次创建片段?或者有没有其他可靠的方法来处理这种情况?谢谢!

活动代码:

编辑:

父片段:

0 投票
1 回答
651 浏览

android - 在android中使用保存的首选项保存多个复选框?

我有一个带有 7 个复选框、1 个文本字段和一个保存按钮的应用程序.....我希望用户能够根据需要选择任意数量的复选框并在文本字段中键入并单击保存.....然后当他们再次打开应用程序时,应选中正确的复选框,并且他们键入的文本应在文本框中......

我几乎让它工作了,但是它似乎一次只保存一个复选框或根本没有保存,我似乎无法弄清楚我做错了什么......我已经阅读了所有线程和帖子,但似乎无法理解正确的....

任何帮助,将不胜感激

这是我的代码

任何帮助将非常感激!!!

0 投票
1 回答
877 浏览

java - Android 应用中的 MVP - Presenter 状态

我在 Android 中使用地图。所以,当我离开活动时(而不是旋转屏幕时),我想保存一些演示者的状态以保存数据。除了带有 ArrayList 的单例之外,我找不到解决方案,但我想使用已经编写好的解决方案。谢谢。

0 投票
1 回答
1250 浏览

android - 保存的游戏+实时多人Android

我想构建一个具有实时多人游戏并支持保存游戏的游戏。

这两个功能都来自 android 提供的 Play Services API。

玩家将邀请他们的朋友,实时玩游戏,然后每当一个玩家退出时,游戏就会被保存,而其他玩家则会断开连接。

然后当朋友们想再次一起玩时,他们可以加载游戏,被放置在等候室,直到他们所有的朋友都连接起来,然后重新开始游戏。

这是否可以通过 Google Play API 在 Android 中实现?我将如何与原始玩家一起从保存的游戏进入等候室?

任何帮助表示赞赏!

谢谢 :)

0 投票
1 回答
182 浏览

android - 在 onRestoreInstanceState 之后从片段执行操作

我有一个执行一些网络操作的自定义视图。根据该操作结果,视图构建 UI。

该视图包含通过 Internet 获取的卡片列表。此视图在多个地方使用。可以说其中之一是我的片段。

这是我在片段内部所做的:

这是我的自定义视图的样子:

好的,现在当用户从我的应用程序切换到另一个应用程序时,我的 Fragment 可能会被破坏。我想保存我的自定义视图的状态。因此我的观点不需要再次从互联网上获取信息。所以我附加CardHelper了以下数据(基于这个答案):

为了争论,我想从这个视图本身保存视图的数据。因此片段/活动或 w/e 使用它不需要知道它在内部是如何工作的。如果我从多个地方使用它,我就不需要复制存储\恢复此视图的代码。

好的,现在解决问题

当 CardHelper 第一次创建时,我init使用一些data. 当我的片段被破坏并且应用程序进入后台然后恢复时,方法将按以下优先级执行:

  1. SavedState:私人SavedState(包裹在){
  2. SavedState: public void writeToParcel(Parcel out, int flags) {
  3. CardHelper:公共无效初始化(数据数据){
  4. CardHelper: public void onRestoreInstanceState(Parcelable state) {

如您所见onRestoreInstanceState,仅在onActivityCreated. 但是我需要知道我是否应该在init此之前在方法中执行网络操作。所以我想先onRestoreInstanceState被执行,然后才被执行init。但是在Fragments LifeCycle中没有可以在此之后完成的方法。

如何重新格式化我的代码,以便在调用onRestoreInstanceStateon后可以在我的片段中调用某些操作CardHelper?还有一个在创建onRestoreInstanceState时不会第一次调用的东西。CardHelper但在这种情况下,我也需要初始化我的 CardHelper。

0 投票
0 回答
2884 浏览

android - 保存 RecyclerView 滚动位置

我有一个带有 ViewPager 和 3 个名为 A、B、C 的片段的活动。A有一个由cardView填充的recyclerView,每张卡片都实现了OnClickListener,这导致了一个新的Activity D。我希望能够在切换选项卡和从打开的Activity D返回时保存recyclerView滚动位置。

到目前为止我在 Fragment A 中所做的事情(包含 RecyclerView 的那个看起来像这样:

我同时显示 Toast,因此该块正在执行(这意味着 savedRecyclerViewState 不为空),但无论如何,recyclerView 总是从第一张卡片开始。此外,当我通过单击卡片打开一个新活动然后返回片段 A 时,我会收到 Toast 通知,表明状态正在保存,但不是 onViewRestored 中的状态。根据我的理解,基本上发生的事情是我的 linearLayoutManager 的状态被保存,但后来我不知何故未能通过信息来恢复滚动位置。我究竟做错了什么 ?

已解决:我自己解决了这个问题,但这可能对未来的某个人有所帮助。TL;DR -> 只需在 onCreateView 中声明适配器,然后在 OnCreateView 和 OnResume() 中调用 yourRecyclerView.setAdapter(yourAdapter),其余代码保持不变

那时发生了什么?很简单,我在 onSavedInstanceState() 中正确地保存了 linearLayoutManager 状态,然后在 OnCreate 中正确地恢复了它,但我无法注意到它的任何差异,因为通过在 OnStart 中设置我的适配器来“覆盖”保存的状态状态。步骤:
1) 片段活动调用 onSavedInstanceState 并将我的 RecyclerView 的 LinearLayoutManager 保存在 Parcelable 中。
2)应用程序回到片段并调用onViewStateRestored()/ OnCreateView(),我们从parcelable中读取并恢复我们的recyclerViewState
3)现在问题OnStart() 被调用,当然这是我的适配器被声明然后设置为 recyclerView 的地方。现在旧的 recyclerView(具有已保存状态的那个)消失了,并被一个新的 recyclerView 取代,没有前一个的记录。

因此,只需在 OnResume() 方法中设置适配器即可解决问题。我想你也可以通过将代码留在 OnStart() 中来解决它,存储旧的 recyclerView状态,然后在 OnStart() 结束时将其传递给新的 recyclerView但这不是一个真正干净的解决方案