从SubActivity调用MainActivity中的方法

时间:2013-10-28 22:10:18

标签: java android

我从MainActivity调用SubActivity,在SubActivity中我必须在MainActivity中调用一个方法。如果我使用

这样做
MainActivity test = new MainActivity();
...
test.method("test");

我得到一个致命的例外“无法启动活动”NullPointerException。

我也试过了MainActivity.method("test"),但这也行不通。通过MainActivity.booleanVariable = true;

更改MainActivity中的变量

什么可能导致NullPointerException?我是否会错过一些基本的东西,我现在太盲目了?

2 个答案:

答案 0 :(得分:2)

永远不要像这样实例化Activity

MainActivity test = new MainActivity();

使用Intent来呼叫Activity。现在...

  

我从MainActivity调用SubActivity,在SubActivity中我必须在MainActivity中调用一个方法。

如果是子{ - 1}},则表示Activity。如果是这种情况,那么你可以做一些像

这样的事情
extends MainActivity

如果子@Override public returnType myMethod(params) // where returnType is int, boolean, void etc... // and params are parameters the method takes (if any) { super.myMethod(params); // other code if needed } 没有Activity,那么请详细说明您需要执行此操作的原因,我们可以帮助您找到更好的方法。

修改

通过阅读你的评论(“...在我的MainActivity中用onActivityResult捕捉它”),我认为你对extends MainActivity如何工作感到困惑,起初可能会很棘手。如果你打电话

startActivityForResult()

在您的第二个Intent i = new Intent(SecondActivity.this, FirstActivity.class); // put extras if needed starActivityForResult(i); ,然后Activity也会进入您的第二个onActivityResult()。当您在那里致电Activity时,系统会从FirstActivity致电。

答案 1 :(得分:0)

onCreate中的 MainActivity (例如):

SecondActivity second = new SecondActivity();
second.test("Hello second");
SecondActivity

中的

class SecondActivity extends Activity
{
   public static void test(String term)
   {
      Log.d("SecondActivity",term);
   }
}

BUT!

我强烈建议你在现实世界的项目中不要使用这种方法。对于测试 - 将会做。

最好的方法是你必须使用Intents,或使用回调(Google for this)

示例:

class MainActivity extends Activity
{
   public void onCreate(Bundle onSavedInstanceState)
   {
      super.onCreate(onSavedInstanceState);
      Intent intent = new Intent(this,SecondActivity.class);
      intent.putExtra("hi","Hello world!");
      startActivity(intent);
   }
}

class SecondActivity extends Activity
{
   public void onCreate(Bundle onSavedInstanceState)
   {
      super.onCreate(onSavedInstanceState);
      Intent intent = getIntent();
      Bundle temp = getIntent().getBundle();
      Lod.d("SecondActivity",temp.getStringExtra("hi","UNDEFINED") +"");
   }
}

您必须在Manifest中声明这两个活动。我想我给你延长的起点。