TabLayout和ViewPager應該在活動佈局中,因爲它更有意義,因爲活動管理碎片。此外,導航抽屜應瀏覽「活動」和「片段之間的活動」。同樣,這對於一個體面的代碼組織來說是合乎邏輯的,它可以防止重複佈局(也就是多個按鈕導航到相同的片段)。
對於Firebase問題,我建議您在Activity中啓動調用,然後使用檢索到的信息在所有片段中調用函數。事情是這樣的:
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(MyFragment f : mFragmentList)
f.addData(dataSnapshot);
}
}
如果你真的想要的片段,使呼叫火力地堡,那麼你可以創建自己的事件和監聽集。
public class SnapshotRetrievedEvent {
private static List<SnapshotRetrievedListener> listeners = new ArrayList<>();
public static void addListener(SnapshotRetrievedListener listener){
listeners.add(listener);
}
public static void notify(DataSnapshot snapshot) {
for(SnapshotRetrievedListener listener : listeners)
listener.onSnapshotRetrived(snapshot);
}
}
public interface SnapshotRetrievedListene {
void onSnapshotRetrieved(DataSnapshot snapshot);
}
然後在你的片段等待快照,您添加監聽器是這樣的:
SnapshotRetrievedEvent.addListener(
new SnapshotRetrievedListener(){
@Override
public void onSnapshotRetrieved(DataSnapshot snapshot){
// Do stuff
}
}
);
當您在另一個片段致電SnapshotRetrievedEvent.notify(snapshot)
onSnapshotRetrieved將被調用。
希望這會有幫助
我以爲你應該使用片段與導航抽屜有一個MOD流利UX? –
確實很受歡迎。我認爲這取決於應用程序本身以及你想要用它做什麼。因爲TabLayout專門用於導航,所以我仍然認爲帶有TabLayout的ViewPager應該獨立於導航抽屜。 – Sunshinator