2015-10-05 82 views
0

我試圖實現片段到活動的溝通。片段活動通信通過傳遞上下文對象onAttach()

通過android developer doc通過活動對象傳遞給onAttach生命週期並設置Fragment-Activity通信。

這個documentation要求傳遞Context對象而不是Activity。在onAttach的生命週期方法中,我用Context對象替換了所有Activity對象。但是在調用Fragment接口的方法時拋出NullPointerException異常。

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    try { 
     colourChangerInterface = (ColourChangerInterface) context; 
    } 
    catch (Exception exp){ 
     System.out.println("error!"); 
    } 
} 

任何人都可以給新的方式使用一個小例子嗎? 感謝

編輯

找到this鏈接,詳細討論是否有同樣的問題。 這個問題是因爲onAttach()中斷了API;它在傳遞Context對象時根本不會被調用。

從上述鏈接中找到的一個簡單而快速的解決方案是將代碼從onAttach移動到onCreate。

+0

您是否嘗試過使用Android的工作室APP-威澤德創建一個新的主/詳細活動?應該包含你需要的每件事情。 – k3b

+0

不,我擴展AppCompatActivity。讓我探索主/細節活動.. –

回答

1

下面是一個小例子,它將描述您在ActivityFragment之間的通信。假設你有一個接口ICommunication。這是如下:

public interface ICommunication { 
    public void testMethod(); 
} 

現在你有一個ActivityMainActivity實現ICommunication那麼它必須有實現的方法testMethod()。這種方法是這樣的:

@Override 
    public void testMethod() { 
    Toast toast = Toast.makeText(getActivity(), "It's called from Fragment", Toast.LENGTH_SHORT).show(); 
} 

現在,假設這MainActivity所屬的FragmentTestFragment。如果你想從TestFragment訪問MainActivity的testMethod()那麼你可以簡單地調用使用這種方式:

((ICommunication)getActivity()).testMethod(); 

這裏,TestFragment必須MainActivity來持有。

我與源相關答案是here 完蛋了:)