回答

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

工程就像一個魅力。非常感謝! –

+0

我想知道爲什麼你使用@覆蓋和用戶Neonamu沒有。兩者都有效嗎? – Burkely91

+1

@ Burkely91是的,它會工作沒有it.BUT你應該使用它。 Java中的超越註解,就是要檢查/驗證你實際上是在做你認爲你是覆蓋沒有你會簡單地定義一個新的方法重載(如果忘記例如參數會報錯)具有相同的名稱不同的參數(做一個過載)並且不實現接口 – HenriqueMS

相關問題