如何从运行单独活动的java类中打开活动?

时间:2014-05-13 15:09:56

标签: java android events android-intent android-activity

好的,所以我有一个在启动时启动的活动(活动一)此活动运行另外两个活动(活动二和活动三),每个活动运行java类,然后加载到触摸事件的另一个活动(活动四)。活动四然后打开主类。所有这些部件都完全按照预期工作。

我遇到的问题是从Main Class和Activity Four开始一项新活动(活动五)。我有我的意图,我的XML布局文件,我的清单正确创建。这就是我对它感到奇怪的地方......

1)如果我将Activity Five放在触摸事件开始时它工作得很好(我的触摸事件处于切换情况。如果我将它放在主类中注册触摸事件或者活动四处理主触摸事件,它可以工作类)。

2)如果我将一个if语句放入触摸事件中,它会失败并且没有错误(处理程序的行为就像事件永远不会发生),除非我将Activity Five放在每个" if"声明(无论我是使用" if"还是多个,非嵌套" if"语句,或者" if / else if"语句都是一样的。总是相同的,处理程序就像没有触摸事件一样,除非所有if语句都启动Activity Five)。

3)如果我将Activity Five放在任何Activity或Main Class中的任何其他地方,并且任何参数都没有,我会收到一条错误消息,说我不能在没有Looper.prepare()的情况下从处理程序启动活动。如果我将Looper.prepare()放入intent调用方法中,那么在我的startActivity(ActivityFive)调用中错误地说空指针异常。

让我试着在这里100%明确......

我根本不会改变意图调用或startActivity()调用。我唯一改变的是位置和周围限定符(if语句)。出于某种原因,startActivity调用仅在我将其置于触摸事件中并且无论什么限定符都注册为true时启动活动时才有效。

我的其他活动都是从触摸事件或彼此之间的顺畅自动流动开始的。

活动五需要通过以下两种方式开始:

1)如果在触摸事件处理程序之外的语句:

  if (object1.isGone)
  {

      ...

      ActivityFour aFour = new ActivityFour();
      Intent aFive = new Intent (afour, ActivityFive.class)
      aFour.startActivity(aFive);

  }

  if (!object1.isGone)
  {

      (do nothing)

  }

2)或者if语句在触摸事件处理程序中:

  switch (screen.touchAction)
  {

      case screen.touch_Middle:

           if (object1.isGone)
           {

                ...
                ActivityFour aFour = new ActivityFour();
                Intent aFive = new Intent (afour, ActivityFive.class)
                aFour.startActivity(aFive);

           }

           if (!object1.isGone)
           {

               (do nothing)

           }

        break;

感谢您的帮助,我一定要+1并检查解决这种疯狂的答案。

1 个答案:

答案 0 :(得分:0)

你有这个:

  ActivityFour aFour = new ActivityFour();
  Intent aFive = new Intent (afour, ActivityFive.class)
  aFour.startActivity(aFive);

绝对肯定 使用Activity创建new的实例!只有Android框架可以创建Android组件的实例(活动,服务,广播接收器,内容提供商)。这是因为这些组件需要Android框架在实例化期间设置正确的Context

如果您只想从Activity开始MainClass,则需要在创建{{1}实例时将Context实例传递给MainClass或者稍后使用MainClass方法之后需要使用它。然后,当您想要启动set...()时,您可以执行此操作:

Activity

Intent aFive = new Intent (afour, ActivityFive.class) context.startActivity(aFive); 可以是Context(继承自Activity),也可以是使用{{Context可以获得的全局应用程序上下文1}}。