2016-07-28 207 views
-2

我嘗試了幾次,從片段中調用MainActivity的Resume方法, 簡單地調用onResume();沒有任何結果。 代碼恢復方法從片段繼續活動

protected void onResume() { 
     all.clear(); 
     outgoing.clear(); 
     incoming.clear(); 
     getFromSdcard(); 
     super.onResume(); 
    } 

我想從片段調用此方法。

+0

活動包含一個片段。你需要什麼來恢復它? –

+0

我已經寫了一些恢復方法的邏輯,這就是爲什麼我想從碎片事件後調用。 –

+0

發佈一些代碼,所以我們現在可以嘗試到目前爲止所嘗試的。 – FlyingPumba

回答

1

加強@ cricket_007響應:

您可以調用的onResume從父活動,但就像你所看到的,的onResume已保護訪問從調用它阻止你。
有一個小的知名度解決方法,可以讓你做到這一點。

1 - 實現你的活動這種方法

public void myOnResume(){ 
    this.onResume(); 
} 

2 - 然後在你的片段,你可以調用

public void myFragmentMethod(){ 
    // make sure to double check casts (to YourActivity) like these before invoking 
    ((YourActivity) getActivity()).myOnResume(); 
} 

結論和建議:即使它不是建議你這樣實施,可以像我說的那樣完成。

在我看來,你應該做的是:

1 - 有你所有的的onResume的)的功能(你自己(你的名字!)喜歡的適當的方法內方法:

public void clearData() { 
     all.clear(); 
     outgoing.clear(); 
     incoming.clear(); 
     getFromSdcard(); 
    } 

2 - 然後,你可以只單獨所有這些來自的onResume()功能,而且還有他們援引像

protected void onResume() { 
    super.onResume(); 
    clearData(); 
} 

3 - 調用它在你的片段像(前面所示)

public void myFragmentMethod(){ 
     // make sure to double check casts (to YourActivity) like these before invoking 
     ((YourActivity) getActivity()).clearData(); 
    } 

讓我知道如何去。 Regards,

+0

它的工作完美,但我有其他解決方案只是在活動中創建一個靜態方法,並簡單地在片段中調用。 –

+2

嗨Piyush。即使這可行,強烈建議您不要使用靜態方法來處理/處理Activity Lifecycle。這是基於當然好設計的原則!應該使用靜態方法來處理數據並執行不受生命週期約束的操作。例如,你可以聲明一個public static int getTwice(int value);因爲它的目的僅僅是計算而不是綁定到任何東西(你只需要在數字上調用方法,並且它給了你那個數字的兩倍,就這麼簡單)。無論哪種方式,您都可以使用靜態方法來完成 –

0

您所呼叫的片段onResume()

你可以試試getActivity().onResume(),但你真的應該做的方法去做任何你需要的代碼,而不是顯式調用生命週期方法。

+0

我試過了,但出現錯誤「方法是父類中的受保護訪問」。 –