Java 从子活动调用MainActivity中的方法
我正在从MainActivity调用一个子活动,在该子活动中,我必须在MainActivity中调用一个方法。如果我使用Java 从子活动调用MainActivity中的方法,java,android,Java,Android,我正在从MainActivity调用一个子活动,在该子活动中,我必须在MainActivity中调用一个方法。如果我使用 MainActivity test = new MainActivity(); ... test.method("test"); 我得到一个致命的例外“无法启动活动”NullPointerException 我还尝试了MainActivity.method(“test”),但也不起作用。通过MainActivity.booleanVariable=true,更改MainAc
MainActivity test = new MainActivity();
...
test.method("test");
我得到一个致命的例外“无法启动活动”NullPointerException
我还尝试了MainActivity.method(“test”)
,但也不起作用。通过MainActivity.booleanVariable=true,更改MainActivity中的变量有效代码>
什么可能导致NullPointerException?我是否错过了一些基本的东西,因为我现在太瞎了?在main活动中在onCreate中(例如):
在第二个活动中:
class SecondActivity extends Activity
{
public static void test(String term)
{
Log.d("SecondActivity",term);
}
}
但是
我强烈建议您在实际项目中不要使用这种方法。而对于测试-就可以了。
最好的方法是使用intent、或使用回调(googleit)
例如:
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") +"");
}
}
您必须在清单中声明这两个活动。我想我可以给你一个延长的起点。不要像这样实例化一个活动
MainActivity test = new MainActivity();
使用意图
调用活动
。现在
我正在从MainActivity调用一个子活动,在该子活动中,我必须在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
}
如果子活动
没有扩展主活动
,请详细说明为什么需要这样做,我们可以帮助找到更好的方法
编辑
通过阅读您在上面的评论(“在我的主要活动中使用onActivityResult捕捉它”),我认为您对startActivityForResult()
的工作原理感到困惑,一开始可能会很棘手。如果你打电话
Intent i = new Intent(SecondActivity.this, FirstActivity.class);
// put extras if needed
starActivityForResult(i);
在您的第二个活动中
然后onActivityResult()
也将进入您的第二个活动中
。当您在那里调用setResult()
时,它将从FirstActivity
调用。方法是什么样子的?如果您想在另一个活动上使用方法,您应该知道意图或至少静态引用。@R.id.pandacoder永远不要对活动进行静态引用。内存泄漏。不应使用new
创建活动。仅使用意图
。将通用代码放入自定义类中。您应该使用Intent
和extras将数据传递给活动和startActivityForResult()
并结合setResult()
返回结果。如果您对此有问题,请提出新问题。不要试图寻找其他技术,因为你无法让它工作。你甚至不应该测试这个。规则很简单。不要试图从另一个活动访问一个活动中的任何内容。在活动中使用静态方法是错误的。大错特错,我再重复一遍。我知道静态变量及其使用的后果。那么,为什么还要向noob建议呢?我看到了一个级别的答案,所以不要进行圣战:)嗯,在阅读了一些文章后,我认为,亚活动是不对的,它只是另一种活动,所以最好称之为第二活动。。使用Intent时,我已经有了带有switch/case构造的“onActivityResult(int-requestCode,int-resultCode,Intent-data)”,但是当我想在第二个activity中的不同点上启动putExtra时,应该将“putExtra”放在哪里呢?我有点困惑,但您使用的是putExtra()
s在创建Intent
之后,通常在调用startActivityForResult()
之前。在实例化Intent
之后,您可以随时添加额外的
,但在调用startActivity()
方法之一之前,它不会被发送。@user2808184我对如何使用它做了简短的编辑。也许这会有所帮助,但我有点担心,如果每次我想在MainActivity中使用该方法时都通过Intents启动MainActivity,它会导致其他问题?我不知道您会导致什么问题。您启动活动
以获得结果,然后完成该活动
…没什么大不了的。如果它是在多个<代码>活动< /代码>中使用的方法,那么您可以考虑我在答案中所解释的内容,并将其扩展到其他方面。
Intent i = new Intent(SecondActivity.this, FirstActivity.class);
// put extras if needed
starActivityForResult(i);