2012-05-30 120 views
0

我想我的活動發送到多個片段相同的事件。而不是讓我的活動調用每個單獨的片段方法:FragmentA.DoTask(),FragmentB.DoTask(),FragmentC.DoTask()等...我想讓我的活動只發送一個事件,然後讓片段監聽此事件。從一個活動發送一個事件到多個片段

在開發者文檔上,他們讓活動「監聽」片段,但活動調用片段的方法。是否有可能:讓片段「傾聽」活動。

謝謝

回答

0

我不認爲有解決辦法。文檔中的「傾聽」一詞更具隱喻性。你必須明確地調用所有片段。

你可以得到的最基本的東西是在你的Activity類中保留一個Fragment列表。例如:創建一個定製的片段類:

public class MyFragment extends Fragment{ 
    public abstract void doTask(); 
} 

讓所有片段都繼承自此類。

public class FragmentA extends MyFragment{ 

    @Override 
    public void doTask(){ 
    //exec code here 

    } 
} 

在您的Activity類中,每次創建Fragment時,都會將它添加到列表中。事件發生時,調用所有碎片。

public class MyActivity extends Activity{ 
    List<myFragment> mFragmentList = new ArrayList<MyFragment>(); 

    public void addFragment(MyFragment fragment){ 
    mFragmentList.add(fragment); 
    } 

    public void onEvent(){ 
    for(MyFragment fragment:mFragmentList){ 
     fragment.doTask(); 
    } 
    } 

} 

注意:如果你沒有很多碎片,該解決方案可以是矯枉過正。

+0

感謝您的回答。我遇到了問題(JavanullPointerexeption)。我認爲這是因爲我沒有實例化接口。在Developpers Doc中,他們在「onAttach」中實現接口。在片段中是可以的,但我應該在Activity類中做什麼? onAttach在那裏不存在。 – Jecimi

+0

@Jecimi抱歉,我誤導了你。這不起作用。當我回家時,讓我考慮一下。 –

+0

好的,謝謝 – Jecimi

1

您可以使用EventBus系統。

描述RRiBbit(儘管這個庫不相關到Android)精確地定義它:

一種Eventbus是一種機制,它允許不同的組件來 不知道關於彼此的相互通信。一個 組件可以向事件總線發送一個事件,而不知道誰將會撿起它或者有多少人會撿起它。組件也可以 在事件總線上收聽事件,而不知道誰發送了事件。通過這種方式,組件可以互相通信,而不依賴於其他組件。 另外,替換組件非常容易。只要新的組件瞭解正在發送和接收的事件,其他組件就不會知道。

那麼這裏的組件究竟是什麼?那麼,一個組件可能是 什麼。在大多數事件總線中,它們都是Java對象。他們發送活動 並且他們還收聽活動。

在Android中,您可以使用EventBus

相關問題