簡體   English   中英

在多個Fragment中實現相同的接口,從Activity調用。

[英]Implementing same interface in multiple Fragments, called from Activity.

在我的ActivityonActivityForResult()我想執行以下操作:

OnReturnFromProfile mCallback;
mCallback.onReturnFromProfile(extras);

我將此全局定義為獨立文件:

public interface OnReturnFromProfile {
    public void onReturnFromProfile(Bundle extras);
}

現在,幾個Fragment可以從ActivityonActivityForResult()獲取數據,我希望每個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM