之后,与Android的片段互相交谈和活动有这么多的乐趣。我很高兴尝试从后台服务进行一些异步回调。为了我的目的,我只想让活动中的监听者从后台服务获取回调。如何做像Android Fragments这样的自定义异步回调?
在叫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为空当服务运行,并且无法启动呼叫。我缺少什么初始化步骤?谢谢。
编辑2017/4/6 从创建一个侦听器,然后附加它来实现它在类中,然后重写该方法。
我真正想要做的是在活动端做一个简单的实现,而不用创建一个服务的对象实例来调用监听器setter方法。我想要这样做的方式是Android如何使用片段< - >活动执行此操作。使用片段,将检查上下文,然后使用onAttach()回调中的上下文对其进行初始化。
我在看片段的例子,其中onAttach()回调已经通过上下文,并且上下文被转移到接口类并设置为侦听器,我如何获得正确的上下文,这应该是一个界面的实例?
@Override
public void onAttach(Context context)
{ super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) { mListener = (OnFragmentInteractionListener) context;
}
你是否将这个活动传递给这个类的*** mListeistener.onSomethingHappened(AHHHappened); *** ...? –
你不会在任何地方设置'mListener'的值:'mListener = ...' –
Thx为头。通过片段示例,现在我注意到在onAttach(上下文上下文)中,mListener确实分配了参数上下文,并将其转换为接口类。现在我的问题是,如何将正确的上下文从活动传递到服务? –