gpt4 book ai didi

java - 从另一个 Activity 调用时为空监听器

转载 作者:行者123 更新时间:2023-12-01 07:18:37 24 4
gpt4 key购买 nike

在 Android 中,我试图在第二个 Activity 中完成任务时设置回调监听器。流程如下:

MainActivity 启动 -> 调用第二个 Activity -> 当第二个 Activity 完成时调用监听器 -> 返回主 Activity

我使用以下代码完成了此操作:

  //// First activity
Main Activity {


// Reference to second activity
private IntroActivity mIntroActivity;

@Override
protected void onCreate(Bundle savedInstanceState) {

/// Listener reference
mIntroActivity = new IntroActivity();

Intent i = new Intent(MainActivity.this, IntroActivity.class);
startActivity(i);


/// Call back for second activity
mIntroActivity.setIntroListener(new IntroActivity.IntroListener() {
@Override
public void finished() {
/// When finished do something!
}

});

}
}


/// Second Activity

public class IntroActivity extends AppIntro {

/// Listener setup

public interface IntroListener {
void finished();
}


public void setIntroListener(IntroListener listener) {
this.mIntroListen = listener;
}

public IntroActivity(){
this.mIntroListen = null;
}


private IntroListener mIntroListen;



@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

}

@Override
public void onDonePressed(Fragment currentFragment) {
super.onDonePressed(currentFragment);

/// Call listenr from MainActivity
mIntroListen.finished();
}



}

向第二个 Activity 添加接口(interface)监听器。当此 Activity 完成时,调用 finish() 并返回到 MainActivity。

我遇到的问题是 mIntroListen.finished();在第二个 Activity 中为空。

这里的任何想法都很棒。我在另一个项目(这是另一个类而不是 Activity )中工作有相同的接口(interface)/监听器,所以我不确定出了什么问题。

提前致谢!

最佳答案

The issue I'm getting is mIntroListen.finished(); is null in the second activity.

您将始终得到 null,因为 mIntroActivity 实例和您实际运行的 IntroActivity 实例不同。

mIntroActivity = new IntroActivity();

以这种方式创建 Activity 并不是一个好主意。要启动 Activity,您应该始终使用 startActivity()

如果您想使用 IntroActivity 中的一些数据返回到 MainActivity 或在完成调用监听器时返回,您应该使用 startActivityForResult(intent)MainActivity 中。此方法将为您提供设置在 IntroActivity 中找到的结果的选项,并且您可以通过 onActivityResult() 方法在 MainActivity 中使用这些结果。

对于您的情况,使用 startActivityForResult(intent) 启动您的 IntroActivity ,完成后调用监听器只需完成 IntroActivity 然后 onActivityResult( ) 方法将在 MainActivity 中调用。并在 onActivityResult()

中执行您想要的操作

查看此官方链接 Getting a Result from an Activity你也可以检查这个answer

关于java - 从另一个 Activity 调用时为空监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48718761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com