问题标签 [android-configchanges]
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 - 更改布局而不调用 onCreate
我有一个包含两个布局文件的活动,一个用于纵向和横向模式。我看到每次更改方向时都会调用 onCreate 方法。我尝试使用
在清单文件中,但它只读取纵向布局。有没有一种方法可以在不调用 onCreate 的情况下将布局设置为横向模式?
android - 配置更改后忽略 view.invalidate()
在使用 SO 解决我的问题一年后,我遇到了一个我找不到解决方案的问题。
我正在使用多个线程来计算位图。当计算新的位图行时,我更新自定义视图并调用 invalidate()。但是当我旋转手机时,位图会停止更新。另一个屏幕旋转后视图只更新一次,同时计算的部分位图也可见。
onCreate 方法的一部分:
我handler
用来更新我的观点:
在我看来,我使用:
解决方案
到目前为止,我找到了一种解决方案。如果我添加invalidate()
到末尾onDraw
,则在屏幕方向更改后会正确更新位图(逐行)。invalidate()
我认为这不是非常“干净”的解决方案,所以我想了解为什么handler
在配置更改后被忽略?
谢谢!
java - 旧设备和 AndroidManifest configChanges "screenSize"
引用文档:
注意:从 Android 3.2(API 级别 13)开始,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。因此,如果您想在为 API 级别 13 或更高级别(由 minSdkVersion 和 targetSdkVersion 属性声明)进行开发时防止由于方向更改而导致运行时重新启动,则除了“orientation”值之外,还必须包含“screenSize”值。也就是说,您必须声明 android:configChanges="orientation|screenSize"
我需要忽略screenSize
配置更改。我的最低 SDK 级别是 8(Android 2.2),目标 SDK 级别是 13。因此,我需要在清单中引入它。
但是,Eclipse 无法识别它,因为它的 Android 设置设置为 2.2。所以我把它改成了合适的级别,现在它可以正常构建了。
但是,我担心在screenSize
配置更改尚不可用的旧版本上会出现问题。(例如,当应用程序在 Android 2.2 设备上运行时。)也就是说,应用程序在读取清单时会崩溃,因为screenSize
它是未知值。还是会在 3.2 之前的设备上简单地忽略它?
PS:我现在没有机会在真实设备上测试它,在如此关键的问题上我不会单独相信模拟器。
android - 配置更改后刷新视图属性(在资源中指定)
我在 values/ 和 values-w600dp/ 中指定了一个尺寸,因为我希望一个图标在非常宽的屏幕上更宽。
价值观/
值-w600dp/
布局/
但是,我目前正在手动处理方向更改:
显现:
因此,layout_width 在方向更改后仍然使用(可能不正确的)旧值。
如何最好地更新 layout_width (大概在 onSizeChanged() 方法中)?
android - Android:ListView,在旋转/配置更改后同时记住和忘记它的getCheckedItemPosition
我真的无法弥补,所以我会感谢任何提示。我必须在这里犯一些错误(4.1.2)。
我有一个which Activity
, in为呈现为.onCreate()
ArrayAdapter
ListView
Checkable
ViewGroup
Activity
已经利用一种机制在NonConfiguration
方向更改时重新构建适配器。但是,它目前没有存储ListView
's getCheckedItemPosition()
,因为我觉得它不应该是必要的(详情如下)。
有趣的是,我观察到的是以下内容。
- 活动被渲染。
- 用户检查 ListView 项目。
- ListView 项目以选中状态显示。
onItemClickListener
调用andgetCheckedItemPosition()
得到正确的ListView
结果。- 用户改变屏幕方向。
onCreate()
重新构建“ListView”并像之前一样显示(之后onCreate()
;见下文)。onCreate()
尽管显示了正确检查的项目,但仍会调用getCheckedItemPosition()
并获取-1
ListView
经过进一步检查,出现以下细节。
onCreate()
:- 获取
ListView
资源 - 建造
MyAdapter
- 设置
MyAdapter
为适配器ListView
getCheckedItemPosition()
返回-1
- 获取
- 之后
onCreate()
:MyAdapter.getView()
被调用CheckableViewGroup.setChecked()
用正确的checked
值调用- 将对所有项目重复最后两个步骤
如前所述,我依赖于 Android 功能,View
如果对象分配了 ID,则对象会保存其状态。我会说是这种情况,因为那里必须有一些对象checked
为所有列表条目设置正确的状态。(顺便说一句,CheckableViewGroup
也覆盖on{Save,Restore}InstanceState()
,但无论是否分配了 ID 都不会被调用(大概是因为它永远不会附加到布局根?)。
所以看起来好像ListView
既知道又不知道它的getCheckedItemPosition()
?还是我走错了路?
android - 如何在 Android 中维护软键盘和刷新布局
当设备旋转时,我有基于纵向/横向的不同布局。所以我不能把这条线放在清单中:
但是,如果用户在一个EditText
字段中并且键盘不在,并且在该字段中填充了文本,然后他们旋转设备,键盘隐藏并且文本丢失(让用户感到沮丧)。
有没有适当的方法来处理这种情况?
android - 如果 Activity 布局更改,则在配置更改后恢复 Fragment 状态
我的活动有一个纵向的单窗格布局和横向的两窗格布局,使用片段。我希望系统在方向更改后恢复所有视图,但我不知道从哪里开始。
考虑到两个方向的布局不同(但相似),这是否可能?
如果有人实现了这个(或至少尝试过),请分享你的经验。
android - LoaderCallbacks 旋转后丢失
每次使用加载器时都会遇到这个问题。如果我启动我的AsyncTaskLoader
然后旋转屏幕(没关系一次或几次)onLoaderFinished()
不会被调用。loadInBackground()
完成它的工作但onLoaderFinished()
没有被调用。似乎错过了回调,但在活动中onCreate()
我有:
回调由活动或字段实现无关紧要。就我而言,我使用字段:
有时它工作得很好,但在某些设备上我又遇到了这个麻烦。
我在 Android 错误跟踪器中进行了搜索,但没有发现任何有用的信息。
这是我的错误吗?我该如何纠正?
编辑:
android - Android - 我应该通过 saveinstancestate 保存我的对象还是仅保存它的 ID
我是 Android 开发的新手,并且编写了一个小应用程序,它调用 Web 服务并为一个相对简单的对象提供水合(想想:拍卖列表或类似的东西)。现在,当手机旋转并重新加载视图时,Web 服务被重新调用,对象被重新水化并重新显示列表。这似乎非常浪费。通过 onSaveInstanceState 存储数据时的最佳做法是什么?存储对象本身是否被认为是可以的,或者最好的做法是存储 ID 并完成每次重新加载它的整个过程。这里是否还有其他需要考虑的经验法则或陷阱?
谢谢
J.P
android - 配置更改时的片段保存状态
我正在开发 Twitter 客户端。我有带有加载器的 TimelineFragment,它从 db 和 web 加载数据。我在 onActivityCreated 中有 setRetainInstance(true)。
方向更改视图何时回收?我怎样才能防止这种情况?