Android 在课堂和活动之间使用startActivityForResult
找不到一个好的答案。我有一个班(没有从MainActivity打开)。 在那里,我想打电话给startActivityForResult,知道什么时候在UI上做点什么。 如何正确执行?我将活动和上下文传递给了类。 课堂上:Android 在课堂和活动之间使用startActivityForResult,android,android-intent,android-activity,startactivityforresult,Android,Android Intent,Android Activity,Startactivityforresult,找不到一个好的答案。我有一个班(没有从MainActivity打开)。 在那里,我想打电话给startActivityForResult,知道什么时候在UI上做点什么。 如何正确执行?我将活动和上下文传递给了类。 课堂上: private void init(){ Intent TestIntent = new Intent(); mActivity.startActivityForResult(TestIntent,MainActivity.TEST);
private void init(){
Intent TestIntent = new Intent();
mActivity.startActivityForResult(TestIntent,MainActivity.TEST);
}
关于主要活动:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent Data) {
super.onActivityResult(requestCode, resultCode, Data);
if (requestCode == TEST){
Toast.makeText(this, "TEST", Toast.LENGTH_SHORT).show();
}
}
选中此项,您必须传递具有所需类意图的代码
private void init(){
Intent TestIntent = new Intent(this,SecondClass);
startActivityForResult(TestIntent,222);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent Data) {
super.onActivityResult(requestCode, resultCode, Data);
if (requestCode == 222){
Toast.makeText(this, "TEST", Toast.LENGTH_SHORT).show();
}
}
你的
TestIntent
是空的。它没有任何东西告诉Android要开始什么活动。你需要像这样创建你的意图
:
private void init(){
Intent TestIntent = new Intent(mActivity, ActivityToStart.class);
mActivity.startActivityForResult(TestIntent,MainActivity.TEST);
}
}
这是否回答了您的问题?为什么希望类调用startActivity?将活动传递给类不是最好的做法,因为该活动可能会被销毁,并且您的类仍将保留对它的引用。您是否调用了setResult()
当完成第二个活动时?我只想从该类中的事件激活主活动上的某些内容。就像类中的listner一样。Ivan,这里只有一个活动。调用startActivityForResult的函数不在活动中,在更改您建议的内容时,我无法编译:Intent TestIntent=新的意图(这个,MainActivity.class);说“无法解析构造函数…”我确实使用了一个传递码(它在MainActivity中定义):public final static int TEST=3;如果它不在活动中,则您必须获取该活动的引用,并使用该引用调用startActivityForResult。但是,将其放置在活动中将是一个很好的建议。感谢您的评论。如果我这样做,它将进入一个始终启动和关闭活动的循环我想这与mActivity是我想开始的同一个活动有关,也就是说(init函数的)类已从MainActivity激活。不过,OnActivityResult没有响应。为什么要尝试从自身启动活动
?我在上面的评论中读到,您只想对该活动
调用一个方法。因为您有对它的引用,所以不需要调用startActivity()
,您可以直接使用MacActivity.whatEverMethod()
调用该方法。听起来您对startActivityForResult()
是什么感到困惑。David Wasser,您可能是对的。现在我尝试按照您的建议从MainActivity调用函数,但它无法识别它们(尽管它们是公共的).有什么想法吗?好吧,问题是我引用的是android应用程序活动,而不是MainActivity。
private void init(){
Intent intent = new Intent(this,another.class);
startActivityForResult(intent,requestCode);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent Data) {
super.onActivityResult(requestCode, resultCode, Data);
if (requestCode == reruestCode){
Toast.makeText(this, "TEST", Toast.LENGTH_SHORT).show();
}
}
private void getResponse(){
setResult(RESULT_OK,new Intent());
finish();
//Use this block of code in the second class.
}