之後,與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確實分配了參數上下文,並將其轉換爲接口類。現在我的問題是,如何將正確的上下文從活動傳遞到服務? –