两个方向的 Android Activity 处理

Posted

技术标签:

【中文标题】两个方向的 Android Activity 处理【英文标题】:Android Activity handling with both orientation 【发布时间】:2014-05-15 20:42:22 【问题描述】:

作为一个初学的 android 开发者,我遇到了关于屏幕方向改变时片段和活动处理的问题。

这是我的情况: 我有两个片段(F_A 和 F_B)。 F_A 包含 ListView (LV),F_B 包含几个 View 的组合:LV 的描述(我们称之为 Desc)。

当应用以纵向模式运行时,第一个 Activity 会显示 LV,然后在单击某个项目后会运行第二个 Activity。在这种情况下,当屏幕的方向从纵向模式更改为横向模式时,我想更改布局以显示两个片段,因为它是在应用程序最初以横向模式运行时完成的。

我希望提供的代码段不会混淆我对情况的描述:)

第一个活动 main_activity.java 文件包含:

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // there is two actitivy_main.xml files
    // one in layout/ directory and the other one in layout-land/ directory.
    ...

@Override
public void respond (int index) 
    // this method got the second fragment if it is visible and not null. 
    // otherwise starts new activity for only description fragment (F_B)

第二个活动(仅适用于纵向模式) DescriptionActivity.java 文件包含:

@Override
protected void onSaveInstanceState(Bundle outState) 
    // saving some stuff for further handling when orientation will changed from port to land.


@Override
protected void onCreate(Bundle savedInstanceState) 
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_description); // This layout contains only F_B fragment
... //here some initialization is done for the description.

考虑到在屏幕旋转期间会调用诸如 onPause()、onStart() 等生命周期保护方法,我认为我必须检查这些方法中的方向,然后销毁第二个活动并运行第一个:main_activity它本身会检查应该显示什么布局(在这种情况下是来自 layout-land/ 目录的布局,我不确定这是一个好主意,所以我想向有更多经验的开发人员寻求帮助。

非常感谢,

阿森

【问题讨论】:

如果你在 android 教程中搜索,你会发现一个教程解释了如何去做。 (如果我没记错的话) 您是否在该 Activity 的清单文件中设置了 configChanges="orientation"?如果是这样,您的onCreate 函数将不会被调用,setContentView 将无法从layout-land 目录中提取正确的布局。 我在培训材料中搜索并没有找到有用的教程,但只是阅读了 Amilcar 的 1 个答案,它似乎可以帮助我找到解决方案。谢谢大家! 【参考方案1】:

在Fragments Android documentation 中描述了实现您想要的最佳方法,您有一个完整解释的示例。

但作为建议,您不必使用 2 个差异活动,也不必检查设备的方向,您只需为布局端口(纵向布局)和布局中的差异配置创建一个 activity_main.xml土地(景观布局)你可以在这里学习:Supporting Different Screens and Orientations。我知道一开始有点困难,但使用片段是 android 的最佳实践之一。阅读这些教程,您将能够实现您的目标。祝你好运:)

【讨论】:

非常感谢,我会再次查看 Fragments 文档。

以上是关于两个方向的 Android Activity 处理的主要内容,如果未能解决你的问题,请参考以下文章

Android Fragment 和 Activity 在方向更改时的行为

如何改变Activity的显示方向

Android中Activity运行时屏幕方向与显示方式详解

android之屏幕方向切换

Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案

Android 锁定屏幕放心