问题标签 [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.
android - 如何在片段中保存加载的 listView 状态?
我有一个活动,带有 listView 的片段和带有每个 listView 项目详细信息的片段。我正在从 API 获取片段数据。当我返回到 listView 时,我应该如何正确保存加载日期和 listView 位置以便能够恢复它?我试图实现这个解决方案一劳永逸,如何正确地将片段的实例状态保存在后台堆栈中?但我无法正确恢复我的 listView。
我的主要活动
和 ListFragment
目前,我的 savedInstanceState 始终为空,我错过了什么?
android - SavedInstanceState 不为空但为空
我有ViewPager
一些片段,用户在其中输入不同的输入。其中一个片段包含 aDatePicker
和 aTimePicker
我存储(当用户选择日期和时间时)作为 JodaLocalDate
和LocalTime
.
即使用户在片段之间滑动,我也想保存日期和时间以保持输入。这是我的代码:
在我的onCreateView
:
我面临的问题是,如果用户到达这个片段但没有输入任何输入,然后滑回以前的片段并来回选择日期和时间片段,应用程序在我的Log
线上崩溃onCreateView
。
我不明白为什么如果我的 selectedDate 和 selectedTime 为 null 时尝试避免保存数据,当重新创建片段时,bundle 与 null 不同(当然键值对不存在)。
你能给我一个解决这个问题的方法吗?我将不胜感激对这种行为的任何解释。
java - savedInstanceState 中的值是空值或默认值
我有一个片段和一个活动,活动代码如下所示:
片段看起来像这样:
(简化代码以便更好地理解)
好的,在我的智能手机中,我有 android 7,我可以将窗口分成 2 个以显示 2 个不同的应用程序,所以当我按下这个按钮并且我的 ActivityA 和我的 FragmentA 正在执行时,我的代码的执行如下onSaveInstanceState
:FragmentA
被调用然后onCreate
ofActivityA
被调用并进入部分
问题是savedInstanceState
默认值是空值,例如 for strings
arenull
和 for ints
are 0
。
我认为这种行为发生在应用程序保存其状态时,而不仅仅是当我按下按钮拆分窗口时。
问题是为什么里面的值savedInstanceState
是空值或默认值?我该如何修复它们?
谢谢
ActivityA中的PSonSaveInstanceState
不执行,只onSaveInstanceState
在FragmentA中执行,我觉得这也是一种奇怪的行为。
编辑:我认为问题在于onSaveInstanceState
未FragmentA
调用。但我不知道为什么不调用它。
android - 在 Activity 中设置 savedInstanceState Bundle
有没有办法手动设置 savedInstanceState Bundle ?
我需要在 savedInstanceState 模式下启动一个活动,在 onCreate 中 savedInstanceState Bundle 不会为 null 。我的观点是使用我的自定义数据恢复活动。谢谢
android - 在 Android 片段中保存实例
我有一个名为 HomeFragment.java 的片段。这是打开我的应用程序时启动的第一个片段。在这个片段中,我有一个名为“onAsyncTaskDoInBackground”的方法,它使用 JSON 从服务器获取所有数据。
我想做的是使用“savedInstanceState”,以便每次重新打开“HomeFragment.java”时不要重新下载所有数据。
例子:
用户打开应用程序并启动 Homefragment.java,下载所有数据。用户转到关于我们的页面并返回主页(Homefragment,java)再次下载所有数据。(应该不需要在同一个应用程序启动时重新下载所有数据)
HomeFragment.java
android - 如何在动态添加的片段中将自定义视图的状态保存在 RecyclerView 中?
TL;DR:我无法区分RecyclerView
' 调用onBindViewHolder
何时回收 aView
或替换Fragment
.
我确实花了很多时间在这里寻找答案,但最终没有任何效果。它所做的只是告诉我答案可能是在 using 中savedInstanceState
,但我没有成功使用它。
结构 :
- 主要片段
- 主视图
- 切换片段按钮
在里面MainView
是一个FrameLayout
,用来装一个Fragment
。
第一个Fragment
无关紧要,但第二个Fragment
是 an OverviewFragment
,其结构为:
- 概述片段
- 回收站视图
- 自定义项目视图
- 文本视图
- 更改文本颜色按钮
- 删除项目按钮
- ...
- 自定义项目视图
- 添加项目按钮
- 回收站视图
我正在使用 aRecyclerView
因为列表需要是水平的,这是我发现的最简单的方法。
期望的行为:
我希望当我单击按钮两次(更改片段然后返回它)时保持颜色更改,而不是当我从列表中删除项目然后再次添加它时。
问题 :
颜色要么一直保存,要么从不保存。onBindViewHolder
在's Adapter 中使用RecyclerView
来设置文本颜色不允许我区分绑定是来自片段替换(我将恢复更改的颜色)还是视图回收(我不会恢复它)
代码 :
'调用SwitchFragmentButton
'方法OnClickListener
MainView
以下是颜色的管理方式(简化):
这是RecyclerView
的Adapter
定义:
MyItem
这是CustomItemView的核心项目(每个MyItem都有它的CustomItemView,每个CustomItemView都有它的MyItem)
备注:
minSdkVersion
: 19。
编辑 :
感谢@goldenb,问题已经缩小,出现了两种解决方案。
解决方案 1:
不要替换片段,而是将它们全部添加,然后显示/隐藏它们。
该解决方案以某种方式有效,但并不是真正解决问题。它避免删除Fragments
,所以状态被保留。
但是,我的问题是关于如何保存然后恢复Fragment
的状态,所以我不能接受这个作为答案。
解决方案 2:
覆盖OverviewFragment#onPause
以保存状态,并将其恢复为OverviewFragment#onCreate
.
这个解决方案似乎是合理的,我目前正在探索它。然而,它需要在我的项目中进行一些重组才能将数据从 重新定位CustomItemView
到MyAdapter
,因此需要一些时间。
android - 片段 savedInstanceState 不起作用
我这里有几个片段,有一个片段,当我回到它时,我想保存它的状态。我尝试在 testfragment 中执行此操作,当我单击按钮时,textview 文本将更改为“test1”(textview 的默认文本是“New Text”)。因此,textview 更改了文本,但是当我移动到另一个片段并返回到它时(HomeFragment
),textview 将进入其默认状态文本(“新文本”)。所以我认为savedInstanceState
它不起作用,因为如果它起作用,当我回到片段时它应该有“test1”。这是我的代码:
android - 恢复 GoogleMaps 对象状态时出现 ClassNotFoundException
从 Activity 返回后尝试恢复我的GoogleMap
( ) 对象的状态时,我的应用程序一直崩溃。位于自定义 Support lib v4 ( ) 中,它本身嵌入在( ) 中。这些组件的设置是正常的。我的设备经过开发人员配置,可以在推送时销毁所有 s。mapView
mapView
Fragment
MyFragment
AppCompatActivity
MyActivity
Activity
在推动和弹出另一个Activity
时,我Fragment
的onCreateView(LayoutInflater, ViewGroup, Bundle state)
方法被调用,并崩溃
在底部产生痕迹。
当is时,第一次创建时不会发生崩溃。启用或禁用 MultiDex 或 Proguard 的任何组合(我能找到)都无法解决崩溃。state
null
事实上,我能做的唯一一件事就是启用 Instant Run 并直接从 Android Studio 运行。在这种情况下,一切都很好。如果 Instant Run 被禁用并且我从 Android Studio 运行,则会出现崩溃。
更新:
上周,Google 发布了 Android Build Tools v5.0.1 和 Google Play Services v10.0。更新后,这个问题似乎已经解决了。但是,我将保留这个问题以供记录,以查看是否有其他想法出现。下面Aлекс的想法是一个很好的想法,我无论如何都可以尝试。
java - CountDownTimer 在关闭并重新打开应用程序后重新启动
我试图向用户展示一个CountDownTimer
用户按下“开始”按钮后立即开始减少,但如果我关闭活动并重新打开它,CountDownTimer 将被重置并重新开始。
我使用这个链接来学习如何设置一个CountDownTimer
.
这是我的编码方式:
即使用户关闭应用程序,请告诉我如何让计时器继续运行。