问题标签 [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.

0 投票
4 回答
1216 浏览

android - 更改布局而不调用 onCreate

我有一个包含两个布局文件的活动,一个用于纵向和横向模式。我看到每次更改方向时都会调用 onCreate 方法。我尝试使用

在清单文件中,但它只读取纵向布局。有没有一种方法可以在不调用 onCreate 的情况下将布局设置为横向模式?

0 投票
1 回答
1225 浏览

android - 配置更改后忽略 view.invalidate()

在使用 SO 解决我的问题一年后,我遇到了一个我找不到解决方案的问题。

我正在使用多个线程来计算位图。当计算新的位图行时,我更新自定义视图并调用 invalidate()。但是当我旋转手机时,位图会停止更新。另一个屏幕旋转后视图只更新一次,同时计算的部分位图也可见。

onCreate 方法的一部分:

handler用来更新我的观点:

在我看来,我使用:

解决方案

到目前为止,我找到了一种解决方案。如果我添加invalidate()到末尾onDraw,则在屏幕方向更改后会正确更新位图(逐行)。invalidate()我认为这不是非常“干净”的解决方案,所以我想了解为什么handler在配置更改后被忽略?

谢谢!

0 投票
2 回答
1723 浏览

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:我现在没有机会在真实设备上测试它,在如此关键的问题上我不会单独相信模拟器。

0 投票
1 回答
245 浏览

android - 配置更改后刷新视图属性(在资源中指定)

我在 values/ 和 values-w600dp/ 中指定了一个尺寸,因为我希望一个图标在非常宽的屏幕上更宽。

价值观/

值-w600dp/

布局/

但是,我目前正在手动处理方向更改:

显现:

因此,layout_width 在方向更改后仍然使用(可能不正确的)旧值。

如何最好地更新 layout_width (大概在 onSizeChanged() 方法中)?

0 投票
1 回答
621 浏览

android - Android:ListView,在旋转/配置更改后同时记住和忘记它的getCheckedItemPosition

我真的无法弥补,所以我会感谢任何提示。我必须在这里犯一些错误(4.1.2)。

我有一个which Activity, in为呈现为.onCreate()ArrayAdapterListViewCheckable ViewGroup

Activity已经利用一种机制在NonConfiguration方向更改时重新构建适配器。但是,它目前没有存储ListView's getCheckedItemPosition(),因为我觉得它不应该是必要的(详情如下)。

有趣的是,我观察到的是以下内容。

  • 活动被渲染。
  • 用户检查 ListView 项目。
  • ListView 项目以选中状态显示。
  • onItemClickListener调用andgetCheckedItemPosition()得到正确的ListView结果。
  • 用户改变屏幕方向。
  • onCreate()重新构建“ListView”并像之前一样显示(之后onCreate();见下文)。
  • onCreate()尽管显示了正确检查的项目,但仍会调用getCheckedItemPosition()并获取-1ListView

经过进一步检查,出现以下细节。

  • 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()?还是我走错了路?

0 投票
1 回答
834 浏览

android - 如何在 Android 中维护软键盘和刷新布局

当设备旋转时,我有基于纵向/横向的不同布局。所以我不能把这条线放在清单中:

但是,如果用户在一个EditText字段中并且键盘不在,并且在该字段中填充了文本,然后他们旋转设备,键盘隐藏并且文本丢失(让用户感到沮丧)。

有没有适当的方法来处理这种情况?

0 投票
3 回答
5634 浏览

android - 如果 Activity 布局更改,则在配置更改后恢复 Fragment 状态

我的活动有一个纵向的单窗格布局和横向的两窗格布局,使用片段。我希望系统在方向更改后恢复所有视图,但我不知道从哪里开始。

考虑到两个方向的布局不同(但相似),这是否可能?

如果有人实现了这个(或至少尝试过),请分享你的经验。

0 投票
1 回答
243 浏览

android - LoaderCallbacks 旋转后丢失

每次使用加载器时都会遇到这个问题。如果我启动我的AsyncTaskLoader然后旋转屏幕(没关系一次或几次)onLoaderFinished()不会被调用。loadInBackground()完成它的工作但onLoaderFinished()没有被调用。似乎错过了回调,但在活动中onCreate()我有:

回调由活动或字段实现无关紧要。就我而言,我使用字段:

有时它工作得很好,但在某些设备上我又遇到了这个麻烦。

我在 Android 错误跟踪器中进行了搜索,但没有发现任何有用的信息。

这是我的错误吗?我该如何纠正?

编辑:

0 投票
4 回答
87 浏览

android - Android - 我应该通过 saveinstancestate 保存我的对象还是仅保存它的 ID

我是 Android 开发的新手,并且编写了一个小应用程序,它调用 Web 服务并为一个相对简单的对象提供水合(想想:拍卖列表或类似的东西)。现在,当手机旋转并重新加载视图时,Web 服务被重新调用,对象被重新水化并重新显示列表。这似乎非常浪费。通过 onSaveInstanceState 存储数据时的最佳做法是什么?存储对象本身是否被认为是可以的,或者最好的做法是存储 ID 并完成每次重新加载它的整个过程。这里是否还有其他需要考虑的经验法则或陷阱?

谢谢

J.P

0 投票
1 回答
208 浏览

android - 配置更改时的片段保存状态

我正在开发 Twitter 客户端。我有带有加载器的 TimelineFragment,它从 db 和 web 加载数据。我在 onActivityCreated 中有 setRetainInstance(true)。

方向更改视图何时回收?我怎样才能防止这种情况?