如何像Android Fragments那样进行自定义异步回调呢?

时间:2017-04-06 05:23:18

标签: java android android-fragments callback

在与Android片段互相交流和活动之后,玩得非常有趣。我很高兴尝试从后台服务中进行一些异步回调。出于我的目的,我只想让活动中的一个监听器从后台服务获得回调。

在名为SomeService的后台服务中,我创建了一个接口并实例化了一个成员监听器:

private OnSomethingHappenedListener mListener;
public interface OnSomethingHappenedListener {
    void onSomethingHappened(String mWhateverHappened);
}

在某些事情发生的地方,我有以下代码

if (mListener != null)
    {
        mListener.onSomethingHappened(AHHHappened);
    }else
    {
        Log.e(TAG,"mListener for the interface method is null for some reason?");
    }

然后在接收回调的活动中,我实施了合同,并覆盖了该方法。

public class listenerActivity extends AppCompatActivity implements SomeService.OnSomethingHappenedListener{

    // Receive Callback
        @Override
        public void onSomethingHappened(String mWhateverHappened) { Log.i(TAG,mWhateverHappened);
        }
}

我已经完成了与片段非常相似的片段并且没有错误,但由于某种原因,在这种情况下,当服务运行时,mListener为空,并且无法启动调用。我错过了哪些初始化步骤?感谢。

编辑4/6/2017 改变了创建一个监听器,然后将其附加到在类中实现它,然后重写该方法。

我真正想要做的是在活动方面做一个简单的工具,而不是为了调用监听器setter方法而创建服务的对象实例。我想要这样做的方式是Android如何使用片段< - >活动来完成它。使用片段,检查上下文,然后使用onAttach()回调中的上下文进行初始化。

我正在查看片段示例,其中onAttach()回调已经传递了上下文,并且该上下文被转换为接口类并设置为侦听器,如何获取正确的上下文,该上下文应该是一个实例界面?

@Override 
public void onAttach(Context context) 
{ super.onAttach(context); 
if (context instanceof OnFragmentInteractionListener) { mListener = (OnFragmentInteractionListener) context; 
}

1 个答案:

答案 0 :(得分:0)

因为你没有初始化监听器

创建一个方法,在public void setMylistener(OnSomethingHappenedListener onSomethingHappenedListener) { mListener = onSomethingHappenedListener } 类中设置侦听器,如下所示

SomeService

并在调用someService.setMylistener(onSomethingHappenedListener); class

之前调用此方法
2098-12-31T00:00:00.000Z

多数民众赞成。