我想我的活動發送到多個片段相同的事件。而不是讓我的活動調用每個單獨的片段方法:FragmentA.DoTask()
,FragmentB.DoTask()
,FragmentC.DoTask()
等...我想讓我的活動只發送一個事件,然後讓片段監聽此事件。從一個活動發送一個事件到多個片段
在開發者文檔上,他們讓活動「監聽」片段,但活動調用片段的方法。是否有可能:讓片段「傾聽」活動。
謝謝
我想我的活動發送到多個片段相同的事件。而不是讓我的活動調用每個單獨的片段方法:FragmentA.DoTask()
,FragmentB.DoTask()
,FragmentC.DoTask()
等...我想讓我的活動只發送一個事件,然後讓片段監聽此事件。從一個活動發送一個事件到多個片段
在開發者文檔上,他們讓活動「監聽」片段,但活動調用片段的方法。是否有可能:讓片段「傾聽」活動。
謝謝
我不認爲有解決辦法。文檔中的「傾聽」一詞更具隱喻性。你必須明確地調用所有片段。
你可以得到的最基本的東西是在你的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();
}
}
}
注意:如果你沒有很多碎片,該解決方案可以是矯枉過正。
您可以使用EventBus系統。
描述RRiBbit(儘管這個庫不相關到Android)精確地定義它:
一種Eventbus是一種機制,它允許不同的組件來 不知道關於彼此的相互通信。一個 組件可以向事件總線發送一個事件,而不知道誰將會撿起它或者有多少人會撿起它。組件也可以 在事件總線上收聽事件,而不知道誰發送了事件。通過這種方式,組件可以互相通信,而不依賴於其他組件。 另外,替換組件非常容易。只要新的組件瞭解正在發送和接收的事件,其他組件就不會知道。
那麼這裏的組件究竟是什麼?那麼,一個組件可能是 什麼。在大多數事件總線中,它們都是Java對象。他們發送活動 並且他們還收聽活動。
在Android中,您可以使用EventBus。
感謝您的回答。我遇到了問題(JavanullPointerexeption)。我認爲這是因爲我沒有實例化接口。在Developpers Doc中,他們在「onAttach」中實現接口。在片段中是可以的,但我應該在Activity類中做什麼? onAttach在那裏不存在。 – Jecimi
@Jecimi抱歉,我誤導了你。這不起作用。當我回家時,讓我考慮一下。 –
好的,謝謝 – Jecimi