标签:android-orientation android
我的教育应用程序有一个包含6到7个标签的标签主机,并支持横向和纵向模式.在与选项卡相关的每项活动中,我都在列表视图中显示一些学生记录,带有一些复选框供选择以及一些等级栏,按钮等.我正在通过Web服务调用从远程服务器获取这些学生记录.由于某些原因,我的应用将在执行某些操作/搜索后显示带有一些按钮的一个初始相对布局.它将在列表视图中显示结果,单击列表项或列表视图中的按钮后,我将显示其他布局.这适用于选项卡宿主中的所有活动.
如果用户更改方向,则我必须恢复相同的状态或相同的屏幕,这意味着如果用户以前看到的记录列表必须显示记录列表,如果是初始记录,则仅必须显示初始记录.我不想在方向更改时强制停止android破坏活动或覆盖onRetainNonConfigurationInstance()上的公共对象.正如某些博客和android doc所建议的那样,这些可能会在以后的操作中引起问题.我所做的只是将所有必需的信息(如屏幕1或2或3,文本视图标签和所有原始数据类型)保存在onSaveInstanceState Bundle中并将它们还原到onRestoreInstanceState中.另外,我正在将自定义搜索结果对象数组写入文件,并在onSaveInstanceState和onRestoreInstanceStates之间检索并删除它.由于我的搜索结果包含100个对象,因此我正在存储大量的原始数据类型列表,当用户快速旋转设备时,这些列表会迅速增加堆大小.
最好的解决方法是什么
1)坚持使用onSaveInstanceState和onRestoreInstanceStates,这会使我的屏幕空白一段时间并增加堆大小,用户多次旋转时不一定执行保存和还原操作
2)将所有需要的数据保留在静态的位置,因为它不是活动的局部内容,因此不会破坏
3)通过扩展Application类来保留所有需要的数据?
解决方法:
我建议您从清单和程序中修复方向,如果方向配置发生变化(您可以添加侦听器),则可以在方向似乎已更改时调整视图.这样,您可以保存数据以及不必要的内存存储.动态对齐和重新定位视图不会模糊,请放心.
// Add inside manifest.
android:configChanges="orientation|keyboardHidden"
// Reposition your views
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
align_landscape();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
align_portrait();
}
}
标签:android-orientation,android 来源: https://codeday.me/bug/20191201/2077736.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。