标签: android-viewpager2

具有 CollapsingToolbarLayout 的垂直 Recyclerview 中的水平滚动 Recyclerview

我正在构建一个应用程序,它使用 来ViewPager2水平滚动页面,每个页面都有一个垂直滚动的内容RecyclerView,其中每个列表的第一个位置都有一行带有水平滚动小部件(例如另一个)RecyclerViewViewPager2附加到寻呼机指示器类型小部件,如从下图。

父 ViewPager2 是 CoordinatorLayout 的子级,当 RecyclerView 垂直滚动时,它会处理折叠顶部内容。然后,此 ViewPager2 会膨胀水平滚动的片段。所以我们有parent layout

-- CoordinatorLayout 
   -- FrameLayout - has appbar scrolling behavior 
      -- ViewPager2
   -- AppBarLayout
      -- CollapsingToolbarLayout
         -- ImageView - background
         -- Toolbar
         -- ConstraintLayout - Holds title and date
Run Code Online (Sandbox Code Playgroud)

父 ViewPager2 child fragments' layout

-- FrameLayout
   -- RecyclerView
   -- Pager Indicator 
Run Code Online (Sandbox Code Playgroud)

RecyclerView 内容的第一行具有相同的布局:

-- FrameLayout
   -- RecyclerView
   -- Pager Indicator 
Run Code Online (Sandbox Code Playgroud)

展开状态

您可以从上面的屏幕截图中看到,第一次加载时RecyclerView重叠,AppBarLayout这是正确的行为。marginTop我向的父布局添加了 negative …

android-recyclerview android-collapsingtoolbarlayout android-appbarlayout android-viewpager2

5
推荐指数
1
解决办法
1278
查看次数

我无法为 viewPager2 调用 FragmentStateAdapter 中的 instantiateItem 元素

当我切换到 viewPager2 时,我必须实现另一种类型的适配器(我使用 FragmentPagerAdapter,现在使用 FragmentStateAdapter),现在我想调用具有旧适配器的 instantiateItem 元素,但它不会出现在新适配器中。

public void onPageChange(int position) {
    //I cannot call instantiateItem from pagerAdapter
    Object object = pagerAdapter.instantiateItem(mMainViewPager,position);
    if (object instanceof MapFragment) {
        MapFragment fragment = (MapFragment) object;
        //fragment.setDevice(mDevice);
        //fragment.setLastTracking();
    }
    if (object instanceof DevicesFragment) {
        DevicesFragment fragment = (DevicesFragment) object;
        //fragment.refresh();
    }
}
Run Code Online (Sandbox Code Playgroud)

java android android-viewpager2

5
推荐指数
1
解决办法
1212
查看次数

滚动行为与子 RecyclerView 和父 Viewpager2 冲突

我有一个垂直滚动ViewPager2,最后一个孩子包含一个RecyclerView相同方向的滚动。

这导致了一个冲突的行为,ViewPager2当我在包含 this 的页面时总是窃取滚动事件RecyclerView。在里面滚动的唯一方法RecyclerView是,如果我滚动得非常慢,如果我让它变快,就像滑动事件一样ViewPager2滚动并更改页面。

目前,我正在做一个修复,涉及禁用用户交互isUserInputEnabled,当页面ViewPager2更改的页面包含时,将标志更改为 false RecyclerView,但欢迎来自框架的通用解决方案:)

android kotlin android-recyclerview android-viewpager2

5
推荐指数
2
解决办法
3382
查看次数

如何在 ViewPager2 中按标签获取 Fragment

有人告诉我使用 FragmentStateAdapter 的 createFragment 覆盖来按索引获取当前片段。

这就是我的适配器的样子。

class AddRestaurantPagerAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) :
    FragmentStateAdapter(fragmentManager, lifecycle) {
    private var fragments = listOf<Fragment>(
        FragmentA.newInstance(),
        FragmentB.newInstance(),
        FragmentC.newInstance(),
        FragmentD.newInstance()
    )

    override fun getItemCount() = 4
    override fun createFragment(position: Int) =
        fragments[position]

}
Run Code Online (Sandbox Code Playgroud)

这工作正常,直到我们在此活动/片段上强制使用 onSaveInstance/OnRestoreInstance。

ViewPager2 重新加载已经存在的片段,我们需要一种方法来访问它。FragmentStateAdapter 类中的以下 LOC 证明了这一点

private void ensureFragment(int position) {
        long itemId = getItemId(position);
        if (!mFragments.containsKey(itemId)) {
            // TODO(133419201): check if a Fragment provided here is a new Fragment
            Fragment newFragment = createFragment(position);
            newFragment.setInitialSavedState(mSavedStates.get(itemId));
            mFragments.put(itemId, newFragment);
        }
    }
Run Code Online (Sandbox Code Playgroud)

在 activity/fragment recreation …

android android-viewpager2

5
推荐指数
1
解决办法
439
查看次数

如何使用 Viewpager2 和 Mediator Tab Layout 动态添加和删除片段页面

我需要根据服务器配置文件在运行时将片段添加到 viewpager2 以及选项卡。我见过的大多数 viewpager2 资源都展示了使用新 TabMediator 选项卡布局的静态 viewpager2。我正在跳过 viewpager,因为我需要添加 viewpager2 支持的 RTL 和垂直滚动。

我最关心的是当我添加和删除片段时如何跟踪特定页面/片段的索引。已完成教程和代码作为示例。

android android-fragments android-tablayout android-viewpager2

5
推荐指数
1
解决办法
2669
查看次数

Android ViewPager2 包含包含 recyclerview 的片段不滚动

我使用 ViewPager2 和 FragmentStateAdapter 来绑定片段。我的每个片段都有 3 个垂直排列的回收器视图。问题是我无法在片段内滚动回收器视图,而且当我尝试垂直滚动内容时,视图分页器会更改选项卡。如何解决这个问题?

android fragment android-recyclerview android-viewpager2

5
推荐指数
1
解决办法
8121
查看次数

如何使 ViewPager2 看起来像带有“幻灯片”页面转换器的无限循环?

我正在寻找一个无限循环来在 ViewPager2 中显示图片。

在图片之间以及最后一个和第一个项目之间以及第一个和最后一个项目之间使用“幻灯片”页面转换器(我认为是默认的)。

我发现的难点是:

  • 没有Integer.maxValue物品,
  • 在第一个和最后一个元素之间有一个真正的过渡,而不是一个setCurrentItem(x, false)不太好看的过渡。

android android-viewpager2

5
推荐指数
1
解决办法
7584
查看次数

使用 ViewPager2 和 FragmentStateAdapter 的片段生命周期行为

fragments我使用ViewPager2和显示 5 FragmentStateAdapter。每个fragment都有ExoPlayer实例。我正在维护ViewPager2.setOffscreenPageLimit(1),并且加载效果良好fragments。但是,当我向下滚动到ViewPager2,pos4pos2pos1应该调用 onStop(), onDestroyView(), onDestroy()。但这并没有发生。

除非我按 ,否则这些方法都不会执行onBackPress()。我在FragmentStateAdapter.

我想执行exoPlayer.release()onDestroyView()释放应用程序的内存。

这是代码

活动

List<Post> postsList = response.getPosts();
ViewPagerAdapter adapter = new ViewPagerAdapter(this, postsList);
binding.pager.setOrientation(ViewPager2.ORIENTATION_VERTICAL);
binding.pager.setOffscreenPageLimit(1);
binding.pager.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

ViewPager适配器

public class ViewPagerAdapter extends FragmentStateAdapter {

    private List<Post> postList;

    public ViewPagerAdapter(@NonNull FragmentActivity fragmentActivity, List<Post> postList) {
        super(fragmentActivity);
        this.postList = postList;
    }


    @NonNull
    @Override
    public …
Run Code Online (Sandbox Code Playgroud)

android fragment android-viewpager exoplayer android-viewpager2

5
推荐指数
1
解决办法
2831
查看次数

使用 jetpack 从 ViewPager2 导航到另一个片段

我有一个活动,FragmentHome 包含 viewpager2。在viewpager 里面有FirstFragment。

在此处输入图片说明

当我想从 FirstFragment 导航到不在 viewpager2 中的 SecondFragment 时

在此处输入图片说明

它抛出

 java.lang.IllegalArgumentException: navigation destination com.example.mymessangerfcm:id/action_FirstFragment_to_SecondFragment is unknown to this NavController
Run Code Online (Sandbox Code Playgroud)

亲爱的社区如何处理这样的导航,为什么会抛出异常?

android android-viewpager2 android-jetpack-navigation

5
推荐指数
1
解决办法
1069
查看次数

viewpager2 RTL 无法与清单一起使用supportsRtl = false

有没有办法强制 ViewPager2 RTL 方向?我已设置android:layoutDirection="rtl"为 viewpager2 但由于android:supportsRtl="false"清单中它仍然是 LTR。我该如何解决这个问题?

android android-viewpager android-viewpager2

5
推荐指数
1
解决办法
646
查看次数