我正在尝试找到一种方法来正确处理设置活动,以从启动其意图的数据中确定其方向。这是用于用户可以选择级别的游戏,其中一些是int肖像方向,有些是景观方向。我面临的问题是 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) 直到活动满载后才生效。这对我来说是一个问题,因为我在启动过程中进行了一些负载和图像处理,我只想做一次。

目前,如果用户选择景观水平:

  • 活动开始ongreate(),默认为肖像
  • 从分析其发射意图中发现它应该处于景观方向
  • 继续不管一直延伸到onResume(),加载信息并执行其他设置任务
  • 在这一点
  • 然后,它再次从ongreate()开始,然后运行到onresume()重复以前的设置

有没有办法避免这种情况并没有执行两次加载?例如,理想情况下,该活动即使在发作之前也将在造成景观或肖像之前就知道,具体取决于发射意图的某些属性,但是除非我错过了不可能的东西。我已经设法将一种方法侵犯了一种方法,以避免通过检查 boolean 在耗时的加载步骤之前,但这似乎不是正确的方法。我想我可以覆盖 onSaveInstanceState, ,但这需要大量其他编码。有什么简单的方法吗?

谢谢!


解决方案:

根据Daniel的回答,这实际上很容易解决。我只需要做一些小改动即可。在我的“菜单”活动中,玩家会选择要玩的级别,我只需要添加一个if/else检查才能选择我的意图启动哪个类。这是通过代表肖像或景观的简单int完成的,确定玩家何时选择了A级别。然后,我创建了一个扩展“ GameLogic”类的第二类;这是包含游戏本身的大部分代码的类,而不是菜单,说明等。

public class GameLandscape extends GameLogic{
}

从字面上看,简单而完全空。这样,它从我以前的活动中继承了所有代码,在该活动中我已经对其进行了编码以根据方向进行不同的处理方式。最后,我只需要在清单上添加一条线,说Gamelandscape总是在景观中运行,而GameLogic总是会在肖像中运行。

确实是一个简单的问题。

有帮助吗?

解决方案

您可以进行两项活动 - 一项用于肖像级别,另一个用于景观水平 - 然后使用AndroidManifest.xml设置活动的方向 android:screenOrientation 属性。如果您使用继承,甚至不必重复代码;将您当前的活动用作基本活动,只需创建景观/肖像活动作为该活动的子类别即可。

我认为更好的解决方案是要打开这两者的正确活动,尽管如果您必须通过意图额外的分析将所有内容进行路由,那么您可以将所有级别转发到第三个活动,而不仅仅是分析意图,并且然后将其转发到适当的活动。

其他提示

你也可以覆盖 onRetainNonConfigurationInstance(). 。这使您可以暂时存储一个可以通过致电检索的项目 getLastNonConfigurationInstance(). 。这样您就可以加载所需的所有东西 onRetainNonConfigurationInstance() 方法您可以将其全部保存到数据结构中并返回。你在你里面 onCreate() 你可以打电话 getLastNonConfigurationInstance() 如果返回零负载,请加载所有内容,如果它返回某物,则将其全部加载。这是一个快速示例:

public class MyActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        DataStructure myData = (DataStructure)getLastNonConfigurationInstance();
        if(myData == null)
        {
            // Load everything in
        }
        else
        {
            // Unpack myData
        }
    }

    @Override
    public Object onRetainNonConfigurationInstance()
    {
        DataStructure myData = new DataStructure();
        // Put everything in to myData
        return myData;
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top