【问题标题】:Android TablaLayout and NavigationDrawerAndroid TablaLayout 和 NavigationDrawer
【发布时间】:2016-05-17 19:40:46
【问题描述】:

我有两个问题,挣扎了几天。我不确定正确的方法是什么。

  1. 我想将选项卡布局与包含三个片段(选项卡布局和视图分页器是主屏幕)和导航抽屉的视图分页器结合起来。 而且我认为您可以从抽屉中导航到的所有内容都应该是片段接受设置或类似的东西。 那么我应该让选项卡布局在主要活动布局的布局中,还是应该将此布局也放在一个片段中(因此查看带有片段的寻呼机在所谓的主页片段中)?

  2. 启动应用程序时,我会检查用户是否已登录以及是否从 Firebase 下载数据。我在另一个片段(数据片段)中执行此操作,我将保留实例设置为 true。 因此,目前其中一个选项卡片段需要来自 Firebase 的数据,但很快它们都将需要它。 如何将数据片段中的数据(列表)传递给选项卡片段或所谓的主片段,然后再传递给选项卡。 我已经尝试过接口,但我不知道如何处理确认更改。

考虑到这两个问题或两者的结合,您将如何解决这个问题/哪种设计方法更好,只使用片段还是让主屏幕位于主 Activity 中,并在用户从抽屉导航到片段时更改视图?

PS。我会尽快添加一些代码。 谢谢。

【问题讨论】:

    标签: android android-fragments android-tablelayout navigation-drawer


    【解决方案1】:

    TabLayout 和 ViewPager 应该在 Activity 布局中,因为它更有意义,因为 Activity 管理 Fragments。此外,导航抽屉应该在活动和片段之间的活动中导航。同样,这对于一个体面的代码组织来说是合乎逻辑的,它可以防止布局中的重复(也就是导航到同一个片段的多个按钮)。

    对于 Firebase 的问题,我建议你在 Activity 中启动调用,然后在所有 Fragment 中使用检索到的信息调用一个函数。像这样的:

    new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(MyFragment f : mFragmentList)
                f.addData(dataSnapshot);
        }
    }
    

    如果您真的希望 Fragment 调用 Firebase,那么您可以创建自己的事件和侦听器集。

    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
            }
        }
    );
    

    当您在其他 Fragment 中调用 SnapshotRetrievedEvent.notify(snapshot) 时,将调用 onSnapshotRetrieved。

    希望对你有帮助

    【讨论】:

    • 我以为你应该使用带有导航抽屉的片段来获得流畅的用户体验?
    • 它看起来确实很受欢迎。我认为这取决于应用程序本身以及您想用它做什么。我仍然认为带有 TabLayout 的 ViewPager 应该是导航抽屉独有的,因为 TabLayout 是专门用于导航的。
    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2015-05-13
    • 1970-01-01
    相关资源
    最近更新 更多