我有两个问题并且奋斗了几天。我不确定正确的方法是什么。
我想将标签布局与包含三个片段的视图寻呼机(标签布局和视图寻呼机是主屏幕)和导航抽屉相结合。 我认为您可以从抽屉导航到的所有内容都应该是片段接受设置或类似的东西。 那么我应该在主要活动布局的布局中使用标签布局,还是应该将此布局也放在一个片段中(因此在一个调用主片段中的视图分页器中有片段)?
启动应用时,我会检查用户是否已登录以及是否从Firebase下载数据。我在另一个片段(数据片段)中执行此操作,我将其设置为true。 因此,目前其中一个标签片段需要来自Firebase的数据,但很快它们都需要它。 如何将数据(列表)从数据片段传递到选项卡片段或所谓的主片段,然后传递到选项卡。 我已经尝试过界面,但我不知道如何处理确认更改。
考虑到两个问题或两者的结合你将如何解决这个/哪种设计方法最好只使用片段或让主屏幕内的主屏幕并在用户从抽屉导航到片段时更改视图? / p>
PS。我会尽快添加一些代码。 感谢。
答案 0 :(得分:0)
TabLayout和ViewPager应该在Activity布局中,因为它更有意义,因为Activity管理片段。此外,导航抽屉应导航活动和片段之间的活动。同样,这对于一个体面的代码组织来说是合乎逻辑的,它可以防止布局中的重复(AKA可以通过多个按钮导航到同一个片段)。
对于Firebase问题,我建议您在Activity中启动调用,然后使用检索到的信息调用所有片段中的函数。像这样:
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(MyFragment f : mFragmentList)
f.addData(dataSnapshot);
}
}
如果您真的想让Fragment调用Firebase,那么您可以创建自己的Event和Listener集。
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);
}
然后在Fragment中等待快照,你可以像这样添加监听器:
SnapshotRetrievedEvent.addListener(
new SnapshotRetrievedListener(){
@Override
public void onSnapshotRetrieved(DataSnapshot snapshot){
// Do stuff
}
}
);
当您在其他片段中调用SnapshotRetrievedEvent.notify(snapshot)
时,将会调用onSnapshotRetrieved。
希望这有帮助