从另一个活动中调用时为空的侦听器 [英] Null listener when called from another activity
问题描述
在Android中,我正在尝试为第二个活动中的任务完成时设置回调侦听器.流程如下:
In Android, I am trying to setup a callback listener for when a task is complete in a second activity. Flow is as follows:
MainActivity启动->调用第二个活动->当第二个活动完成时,调用侦听器->返回主活动
MainActivity Starts -> Calls Second Activity -> When second activity completes call listener - > Return to Main Activity
我用以下代码完成了此操作:
I have done this with the following code:
//// 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();
}
}
将接口侦听器添加到第二个活动.完成此活动后,请调用finish()并返回MainActivity.
Adding an interface listener to the second activity. When this activity is complete call finished() and return to MainActivity.
我遇到的问题是mIntroListen.finished();在第二个活动中为null.
The issue I'm getting is mIntroListen.finished(); is null in the second activity.
这里的任何想法都很棒.我在另一个项目中使用了相同的接口/侦听器(这是另一个没有活动的类),所以我不确定什么地方出错了.
Any ideas here would be great. I have the same interface / listener working in another project (which is another class not activity) so I'm not sure whats wrong.
提前谢谢!
推荐答案
我遇到的问题是mIntroListen.finished();在第二个活动中为null.
The issue I'm getting is mIntroListen.finished(); is null in the second activity.
由于mIntroActivity
实例和IntroActivity
的实际运行实例不同,因此您将始终得到null
.
You will always get null
because mIntroActivity
instance and your actual running instance of IntroActivity
are different.
mIntroActivity = new IntroActivity();
以这种方式创建活动不是一个好主意.要启动Activity
,您应该始终使用startActivity()
.
Creating activity this way is not a good idea. To start a Activity
you should always use startActivity()
.
如果要使用IntroActivity
中的某些数据返回到MainActivity
,或者仅在完成呼叫侦听器后返回,请使用MainActivity
中的startActivityForResult(intent)
.此方法将为您提供设置在IntroActivity
中找到的结果的选项,并且可以通过onActivityResult()
方法在MainActivity
中使用这些结果.
If you want to get back to MainActivity
with some data from IntroActivity
or just back when completes call listener you should use startActivityForResult(intent)
in MainActivity
. This method will give you options to set result you have found in IntroActivity
and you can use those result in MainActivity
by onActivityResult()
method.
对于您的情况,请使用startActivityForResult(intent)
来启动IntroActivity
,并且在完成调用侦听器后,只需完成IntroActivity
即可,然后将在MainActivity
中调用onActivityResult()
方法.然后在onActivityResult()
For your case use startActivityForResult(intent)
to start your IntroActivity
and when completes call listener just finish IntroActivity
then onActivityResult()
method will be called in MainActivity
. And do what you want in onActivityResult()
Check this official link Getting a Result from an Activity and you can also check this answer
这篇关于从另一个活动中调用时为空的侦听器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!