[英]Implementing same interface in multiple Fragments, called from Activity.
在我的Activity
的onActivityForResult()
我想執行以下操作:
OnReturnFromProfile mCallback;
mCallback.onReturnFromProfile(extras);
我將此全局定義為獨立文件:
public interface OnReturnFromProfile {
public void onReturnFromProfile(Bundle extras);
}
現在,幾個Fragment
可以從Activity
的onActivityForResult()
獲取數據,我希望每個Fragment
都實現此interface
。
顯然,這里存在一個主要的設計缺陷。 mCallback
不知道要調用該接口的哪個實現。
處理這種情況的正確方法是什么? 似乎很長的路要在每個Fragment
創建此interface
,但是現在我喜歡5個重復的interface
s。 然后代碼變得凌亂,因為在Activity
我必須在一些長條件語句中傳遞Fragment
tag
。
這是唯一的方法嗎? 我是否需要使用界面?
在此深入了解流程:
Fragment
A(附加到Activity
A)具有一個帶有RecyclerView
的列表。 當您單擊列表行時,它將打開Activity
B(使用startActivityWithResult()
)。 在Activity
B中,您可以做一些會影響列表的事情(剛剛提到)。 很自然,我想在Activity
B關閉時更新列表。 我現在可以在Activity
A中獲得結果。問題是-路由到哪里? 我有Fragment
的A,B,C,D和E,它們都可以附加到Activity
A並在列表上執行類似的操作。 所以我的意圖(沒有雙關語)是通過單個interface
回調(我不確定甚至可能)來最小化代碼。
在鍵入此內容時,我開始意識到,如果我有5個具有相同操作和數據類型的列表, 可能會遇到更大的體系結構問題? 他們確實有細微的差別。
片段不必定義接口。 接口可以在其他位置定義一次。 每個Fragment都可以簡單地實現接口。
實際上,不需要知道發生“ onReturnFromProfile()”事件的Fragment不需要實現該接口。
該活動可以:
if(fragment instanceof OnReturnFromProfile) {
(OnReturnFromProfile)fragment.onReturnFromProfile();
}
請注意,將對象轉換為對接口的引用可以解決“接口的哪種實現?”。 問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.