我有一個Activity
和與它相連六種不同Fragments
。每個片段都有OnFragmentInteractionListener
接口和活動實現所有這些偵聽器以接收回調。它看起來有點凌亂,所以我感興趣的是有一些模式/方法來簡化這一點,使更優雅?如何在一個Activity中正確處理多個片段交互偵聽器?
10
A
回答
17
一個好的解決方案可以是對所有片段使用SAME OnFragmentInteractionListener,並使用每個偵聽器方法的一個參數(如TAG參數)來標識發送動作的片段。
下面的例子:
創建一個新的類,每個片段使用這個類
OnFragmentInteractionListener.java
public interface OnFragmentInteractionListener {
public void onFragmentMessage(String TAG, Object data);
}
在你的活動:
public void onFragmentMessage(String TAG, Object data){
if (TAG.equals("TAGFragment1")){
//Do something with 'data' that comes from fragment1
}
else if (TAG.equals("TAGFragment2")){
//Do something with 'data' that comes from fragment2
}
...
}
您可以使用對象類型傳遞你想要的每種類型的數據(然後,永遠如果,您必須將Object轉換爲必需的類型)。
使用這種方式,維護是很容易,有6個型動物聽衆和你想傳遞所有類型的數據的方法。
希望這會有所幫助。
5
我試圖改善neonamu's answer:
您可以定義像上面指定的接口,而是一個普通的一個
public interface OnListFragmentInteractionListener<T> {
void onListFragmentInteraction(String tag, T data);
}
然後在主機活動,你可以實現它專門爲你想要的類型,或者像上面提到的那樣對象:
public class MyFragActivity implements OnListFragmentInteractionListener<Object> {
...
@Override
public void onListFragmentInteraction(String tag, Object data) {
//do some stuff with the data
}
}
這種方式當你根據你的應用程序的需要實現接口,也許您可以在其他情況下重複使用此界面。
相關問題
- 1. 處理多個操作偵聽器
- 2. 如何正確清理MSMQ偵聽器?
- 3. Oracle AQ - 如何確定一個偵聽器是否正在偵聽隊列
- 4. 如何處理GridView中的多個偵聽器Android
- 5. 在同一個片段中實現多個事件偵聽器 - Android
- 6. 如果偵聽器與我的Activity不在同一個類中,如何使用asyncTask +位置偵聽器?
- 7. 如何在第一個片段中使用偵聽器替換另一個片段
- 8. 接口偵聽器片段
- 9. 如何在活動中正確清理位置偵聽器
- 10. 我有兩個Message Listener正在偵聽相同的消息。如何確保一個偵聽器先於另一個偵聽器執行其代碼?
- 11. 處理多個片段值
- 12. 如何在java中正確實現一個端口偵聽器作爲服務?
- 13. gevent多個StreamServer偵聽器
- 14. Android中實現偵聽器的片段
- 15. OnTouch偵聽器不工作在片段
- 16. 處理多個文檔就緒事件偵聽器
- 17. Chrome擴展程序:處理多個消息偵聽器
- 18. 如何在adf中處理客戶端偵聽器之前處理動作偵聽器方法
- 19. 如何添加一個jQuery偵聽器?
- 20. 如何爲一個事件設置多個偵聽器?
- 21. Android:如何在單個Activity中管理片段?
- 22. 如何在片段中設置按鈕偵聽器按鈕
- 23. 在一個活動中處理多個片段
- 24. 在ViewPager中處理ViewPager中的觸摸偵聽器並使用片段中的內部片段
- 25. web.xml中的多個偵聽器?
- 26. javascript中的多個事件偵聽器
- 27. Android中的多個偵聽器
- 28. 線程正在偵聽一個事件
- 29. 文件偵聽多個文本字段
- 30. 在javafx中處理鼠標事件:如何添加偵聽器?
工程就像一個魅力。非常感謝! –
我想知道爲什麼你使用@覆蓋和用戶Neonamu沒有。兩者都有效嗎? – Burkely91
@ Burkely91是的,它會工作沒有it.BUT你應該使用它。 Java中的超越註解,就是要檢查/驗證你實際上是在做你認爲你是覆蓋沒有你會簡單地定義一個新的方法重載(如果忘記例如參數會報錯)具有相同的名稱不同的參數(做一個過載)並且不實現接口 – HenriqueMS