首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MainActivity中的SubActivity调用方法

MainActivity中的SubActivity调用方法
EN

Stack Overflow用户
提问于 2013-10-28 22:10:18
回答 2查看 580关注 0票数 0

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

代码语言:javascript
复制
MainActivity test = new MainActivity();
...
test.method("test");

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

我也尝试过MainActivity.method("test"),但这也不起作用。更改MainActivity中的变量有效,由MainActivity.booleanVariable = true;完成

是什么导致了NullPointerException?我是不是错过了一些基本的东西--我现在太盲目了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-28 22:17:43

永远不要像这样实例化Activity

代码语言:javascript
复制
MainActivity test = new MainActivity();

使用Intent调用Activity。现在..。

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

如果它是子Activity,那就意味着它是extends MainActivity。如果是这样的话,你就可以做如下的事情

代码语言:javascript
复制
@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没有extends MainActivity,那么请详细说明为什么需要这样做,我们可以帮助找到更好的方法。

编辑

从上面读到你的评论("...catching it with onActivityResult in my MainActivity"),我认为您对startActivityForResult()的工作方式感到困惑,一开始可能很棘手。如果你打电话

代码语言:javascript
复制
Intent i = new Intent(SecondActivity.this, FirstActivity.class);
// put extras if needed
starActivityForResult(i);

在第二个Activity中,onActivityResult()也将进入第二个Activity。当您在那里调用FirstActivity时,将从setResult()调用它。

票数 2
EN

Stack Overflow用户

发布于 2013-10-28 22:17:03

MainActivity In onCreate中(例如):

代码语言:javascript
复制
SecondActivity second = new SecondActivity();
second.test("Hello second");

SecondActivity中:

代码语言:javascript
复制
class SecondActivity extends Activity
{
   public static void test(String term)
   {
      Log.d("SecondActivity",term);
   }
}

但!

我强烈建议您在实际项目中不要使用这种方法。还有测试-会的。

为了获得最好的方式,您必须使用意图,或使用回调(谷歌它对此)

例子:

代码语言:javascript
复制
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") +"");
   }
}

你必须在“宣言”中声明这两项活动。我想我给你一个延长时间的起点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19645998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档