我从MainActivity调用SubActivity,在SubActivity中我必须在MainActivity中调用一个方法。如果我使用
这样做MainActivity test = new MainActivity();
...
test.method("test");
我得到一个致命的例外“无法启动活动”NullPointerException。
我也试过了MainActivity.method("test")
,但这也行不通。通过MainActivity.booleanVariable = true;
什么可能导致NullPointerException?我是否会错过一些基本的东西,我现在太盲目了?
答案 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);
}
}
我强烈建议你在现实世界的项目中不要使用这种方法。对于测试 - 将会做。
最好的方法是你必须使用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中声明这两个活动。我想我给你延长的起点。