从另一个活动中调用时为空的侦听器 [英] Null listener when called from another activity

查看:71
本文介绍了从另一个活动中调用时为空的侦听器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆