Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在课堂和活动之间使用startActivityForResult_Android_Android Intent_Android Activity_Startactivityforresult - Fatal编程技术网

Android 在课堂和活动之间使用startActivityForResult

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);

找不到一个好的答案。我有一个班(没有从MainActivity打开)。 在那里,我想打电话给startActivityForResult,知道什么时候在UI上做点什么。 如何正确执行?我将活动和上下文传递给了类。 课堂上:

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.
        }