【问题标题】:Display slidingUpPanel across all activities在所有活动中显示slidingUpPanel
【发布时间】:2018-06-20 08:53:27
【问题描述】:

我正在尝试在所有活动中添加一个slidingUpPanel(Sliding up panel)。该面板由一个 viewpager 组成,该 viewpager 又由两个片段组成。其中一个片段有一个 recyclerView(超过 1000 个项目),另一个片段有一些数据会根据用户的选择动态变化。这个面板与 google play music 和 soundcloud 的面板非常相似。现在为了显示这个面板,我测试了两种方法:

1) 我创建了一个基本活动并将向上滑动面板添加到它,然后将其余活动扩展到基本活动。所以这种方式我只需要创建一个面板和viewpager。

2) 我在所有活动中都加入了向上滑动面板。但是这种方法非常难以管理,因为我已经为所有活动创建了查看页面,如果一个活动中的数据发生变化,我必须编写代码来反映所有活动的变化。

现在这两种方法的问题是每次我打开一个新活动时,都会创建一个新的 viewpager 实例和片段。因此,假设我在 recyclerview 片段中有 1000 多个项目,切换活动需要超过 2-3 秒,因为每次创建片段的新实例并重新加载数据。这肯定会导致糟糕的用户体验。

有没有什么方法可以让 viewpager 和片段只创建一次(当应用程序启动时)并且只在用户关闭应用程序时被销毁?并且每次用户切换活动时不应加载数据。我只是想减少活动切换时间。有什么想法吗?

谢谢。

【问题讨论】:

  • 尝试使用 viewpager 创建一个活动,并将其他活动作为片段放置在该活动中。
  • 没找到你。你能解释一下吗?
  • recyclerview 中有 1000 多个项目 => 那是你的问题,这对用户有什么实际意义?
  • 如果用户的设备中有 1000 多首歌曲,所有歌曲都会在此处列出。这个歌曲列表存储在 sharedpreference 中。没有尝试延迟加载,因为我没有看到实现此功能的离线音乐播放器应用程序。

标签: android android-fragments android-recyclerview android-viewpager


【解决方案1】:

好吧,对于像滑动面板这样的 ui 元素,它对于许多项目都保持不变,最好有一个单一的活动。

因此,如果您有 1 个活动,则可以在滑动面板内有一个查看器,并且该部分保持不变。接下来,在您的活动中,您可以使用 FrameLayout 来托管片段。这样做可以实现滑动面板的单个实例以及在片段内容之间的导航。

拥有一些繁重的数据收集让您希望尽可能少地重新创建这些项目。

【讨论】:

  • 所以你想说的是,我创建了一个活动并将向上滑动的面板和 viewpager 与 Framelayout 一起添加到它。然后,将我现在拥有的活动转换为片段并将它们添加到此活动(框架布局)中。对吗?
  • 没错,这将允许您在活动中拥有所有全局逻辑,并在片段中拥有所有单独的屏幕
  • 解决方案很好,但是我有 9-10 个活动,我认为我不可以全部编辑它们:(
  • 嗯,这是你唯一可以拥有一个面板实例的东西,而且片段的创建比活动的创建占用更少的资源
【解决方案2】:

有两种方法(假设您使用的是 sothree 的 SlidingUpPanelLayout)

  • 带底部导航视图 简单的方法是创建一个底部导航视图并将其保留在 MainActivity 中,并将向上滑动的面板布局附加到底部导航视图 (layout_above = bottomnavbar_id),因为底部导航保留在整个应用程序中,因此向上滑动面板也必须保留它

  • 没有底部导航视图 在 MainActivity 中创建一个框架布局,将属性宽度和高度设置为match_parent,并创建滑动uppanelayout 并提供属性gravity="bottom" 使框架布局保持在该 slideruppanellayout 之上,使用该 frame_layout 显示您想要从片段中显示的内容

就是这样

【讨论】:

    猜你喜欢
    • 2018-04-19
    • 1970-01-01
    • 2014-10-12
    • 2012-09-24
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    相关资源
    最近更新 更多