【问题标题】:Use startActivityForResult from class to activity从类到活动使用 startActivityForResult
【发布时间】:2020-01-28 13:57:08
【问题描述】:

找不到一个好的答案。我有一堂课(没有从 MainActivity 打开。 在那里我想调用 startActivityForResult,以了解何时在 UI 上执行某些操作。 我该如何正确地做到这一点?我将活动和上下文传递给班级。 上课:

private void init(){
        Intent TestIntent = new Intent();
        mActivity.startActivityForResult(TestIntent,MainActivity.TEST);
    }

在 MainActivity 上:

    @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();
        }
    }

【问题讨论】:

  • 这能回答你的问题吗? How to use StartActivityForResult()
  • 为什么要类调用startActivity?将活动传递给类并不是最好的事情,因为活动可能会被销毁,而您的类仍将持有对它的引用。
  • 第二个Activity结束的时候你给setResult()打电话了吗?
  • 我只想从这个类中的一个事件中激活主要活动的一些东西。就像一个班级的听众。伊万,这里只有一项活动。

标签: android android-intent android-activity startactivityforresult


【解决方案1】:

检查这个,你必须传递带有所需类意图的代码

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

【讨论】:

  • 调用 startActivityForResult 的函数不在活动内,更改您的建议时我无法编译: Intent TestIntent = new Intent(this,MainActivity.class);说“无法解析构造函数...”我确实使用了密码(它在 MainActivity 中定义):public final static int TEST = 3;
  • 如果它不在活动中,那么您必须获取该活动的引用并将其用于调用 startActivityForResult。但是,将它放在 Activity 中会是一个不错的建议。
【解决方案2】:

您的TestIntent 为空。它里面没有任何东西告诉Android 什么Activity 开始。您需要像这样创建Intent

private void init(){
    Intent TestIntent = new Intent(mActivity, ActivityToStart.class);
    mActivity.startActivityForResult(TestIntent,MainActivity.TEST);
}

【讨论】:

  • 感谢您的评论。如果我这样做,它会进入一个一直启动和关闭活动的循环或类似的东西。我想这与 mActivity 是我想开始的同一个活动有关 - 这意味着类(初始化函数)是从 MainActivity 激活的。然而,OnActivityResult 没有响应。
  • 你为什么要从自己开始一个Activity
  • 我在上面的评论中读到,您只想在 Activity 上调用一个方法。既然有引用,就不需要调用startActivity(),直接使用mActivity.whatEverMethod()调用方法即可。听起来您对 startActivityForResult() 是什么感到困惑。
  • 大卫·瓦瑟,你可能是对的。现在我尝试按照您的建议从 MainActivity 调用函数,但它无法识别它们(尽管它们是公开的)。有什么想法吗?
  • 好的,问题是我引用了 android 应用程序活动而不是 MainActivity。
【解决方案3】:
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.
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多