标签: android-viewpager2

更新回收者视图数据

几天以来,我尝试在 viewpager2 中处理 recyclerview 中的数据。viewpager 有一个适配器管理 recyclerview 中的数据。但我尝试做的一切似乎都不起作用。也许我误解了目的或其他什么。我希望你可以帮助我。

此活动管理 viewpager 及其适配器。它将数据发送到内部回收器视图:

public class AudioFilePanel extends AppCompatActivity
{
    private String currentTab;
    private ViewPagerAdapter adapter;
    private ViewPager2 viewPager;
    private TabLayout tabLayout;
    private Map<String, List<String>> content;

    private String path;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_audio_file_panel);

        viewPager = findViewById(R.id.view_pager2);
        tabLayout = findViewById(R.id.tabs);
        Button addFilesByTag = findViewById(R.id.add_files_with_tag);

        if (null == currentTab)
        {
            currentTab = "music";
        }

        content = listByTag();

        adapter = new ViewPagerAdapter(getApplicationContext(), new ArrayList<>(content.values()));
        viewPager.setAdapter(adapter);
        new TabLayoutMediator(tabLayout, viewPager,
            (tab, position) -> tab.setText(content.keySet().toArray()[position].toString())).attach(); …
Run Code Online (Sandbox Code Playgroud)

java android android-recyclerview android-viewpager2

2
推荐指数
1
解决办法
3144
查看次数

ViewPager2禁用过渡动画

我将 ViewPager2 与 TabLayout 连接。其他提到 ViewPager 的帖子提供了重写 setCurrentItem(position, false) 的方法,其中 false 会禁用平滑滚动。但是,TabLayoutMediator 调用 onTabSelected(TabLayout.Tab tab) ,后者调用 viewpager.setCurrentItem(postion, true)。如果 TabLayoutMediator 以及 ViewPager2 都是最终的,我如何覆盖此行为?

已经尝试过:

viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
        @Override
        public void onPageSelected(int position) {
            viewPager.setCurrentItem(position, false);
        }
    });
Run Code Online (Sandbox Code Playgroud)

并像这样重写 onTabSelected :

     tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(viewPager.getPosition(), false);
        }
         ......
    }
Run Code Online (Sandbox Code Playgroud)

android android-tablayout android-viewpager2

2
推荐指数
1
解决办法
3750
查看次数

如何在 ViewPager2 中以编程方式设置当前项目?

所以在旧版本中,您可以设置使用ViewPager的初始位置ViewPager

viewPager.setCurrentItem(x)

你如何做到这一点ViewPager2

android android-adapter android-recyclerview android-viewpager2

2
推荐指数
1
解决办法
2922
查看次数

检测 ViewPager2 android 中的过度滚动或页面结束事件

没有过度滚动的方法,因为ViewPager2我需要检测过度滚动,这样一旦没有更多页面,我就可以将用户带回主页。

android android-viewpager2

2
推荐指数
1
解决办法
1661
查看次数

ViewPager2 selectCurrentItem - 选择选项卡,但在此选项卡内放置错误的片段

我有基本的 ViewPager2 和 Tablayout - 在每个页面中我都有不同的片段。当我需要不从第一个(默认)选项卡打开此视图时,我正在这样做:

 viewPager.currentItem = selectedTabPosition
Run Code Online (Sandbox Code Playgroud)

此代码选择选项卡,但在其中打开第一个选项卡的片段!仅当我通过点击来选择选项卡时 - 我才能在每个选项卡中看到正确的片段。我也尝试使用 Tablayout 进行选择,如下所示:

tabLayout.getTabAt(position)?.select()
Run Code Online (Sandbox Code Playgroud)

但这段代码没有帮助,也可以解决这个错误。我也尝试过设置viewPager.currentItem-post / postDelay但这也不起作用。

也许我失去了一些东西?或者这是 ViewPager2 中的错误?

(编辑 - ViewPager 代码)

 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    setupPagerAdapter()
}

private fun setupPagerAdapter() {
    val adapter = MainDocumentScreenPagerAdapter(this)

    binding?.viewPager?.letUnit {
        it.adapter = adapter
        binding?.tabsPagerView?.attachViewPager(requireContext(), it, adapter)

        // set tab
        it.currentItem = params.pageType.ordinal
}
Run Code Online (Sandbox Code Playgroud)

适配器代码

class MainDocumentScreenPagerAdapter (fragment: Fragment) : ViewPager2TitleAdapter(fragment) {

override fun getItemCount(): Int = DocumentPageType.values().size

override fun createFragment(position: …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager android-tablayout android-viewpager2

2
推荐指数
1
解决办法
2250
查看次数

找不到 com.androidx.multidex:multidex:2.0.1

> Could not resolve all files for configuration ':app:debugCompileClasspath'.
   > Could not find com.androidx.multidex:multidex:2.0.1.
     Required by:
         project :app
Run Code Online (Sandbox Code Playgroud)

在我的项目中添加 multidex 后出现此错误

android fragment kotlin android-multidex android-viewpager2

2
推荐指数
1
解决办法
5539
查看次数

ViewPager2 内项目的阴影被剪裁

我有一个活动,其中有NavHostFragment. 这NavHostFragment将承载三个片段,其中两个是FragmentAFragmentB。在 里面FragmentB,我有一个ViewPager2有两页的页面:PageAPageB,两者实际上都是由一个片段 构建的FragmentC。在每个PageA和里面PageB,我都有一个RecyclerView

这是 的布局 XML FragmentB

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="@dimen/keyline_4"
        android:clipChildren="false"
        android:clipToPadding="false"
        tools:context=".ui.NavigationActivity">

        ...

        <androidx.viewpager2.widget.ViewPager2
            android:id="@+id/frag_course_view_pager"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginTop="@dimen/keyline_4"
            android:clipChildren="false"
            ... />

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/frag_course_tablayout"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/keyline_4"
            ... />


    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)

如您所见,我已将片段的根布局设置clipChildrenfalse. 我也将ViewPager2's设置clipChildrenfalsePageA …

android android-layout android-view android-recyclerview android-viewpager2

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

如何从 ViewPager2 的 NavHostFragment 内的片段导航回来?

从 ViewPager2 的嵌套片段导航回来的正确方法是什么?

尽管使用app:defaultNavHost="true"FragmentContainerView在页面的分片嵌套按后退按钮同时呼吁活动的背压,而不是导航回到以前的片段。

android android-architecture-navigation android-viewpager2

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

从Viewpager2片段访问Parent的Fragment功能

我正在使用导航组件,并且在我的主页片段中有一个 ViewPager2。我们知道viewPager2也包含Fragment。如何通过viewpager2的片段调用父函数?我尝试过一些方法,例如在构造函数中传递函数,但我意识到使用单例模式创建的片段。我只知道如何在构造函数中传递函数,例如标准类(不是单例类)

我的适配器

class DetailSliderAdapter(fragmentActivity: FragmentActivity) : FragmentStateAdapter(fragmentActivity) {

    private val images = mutableListOf<String>()

    fun addImages(lsImage: List<String>){
        images.addAll(lsImage)
        notifyDataSetChanged()
    }

    override fun getItemCount(): Int = images.size
    override fun createFragment(position: Int): Fragment {
        return SliderImageFragment.newInstance(images[position])
    }

    class SliderImageFragment: Fragment(){
        companion object{
            const val EXTRA_SLIDER_IMAGE = "extra_slider_image"
            fun newInstance(imageStr: String) = SliderImageFragment().apply {
                this.arguments = Bundle().apply {
                    this.putString(EXTRA_SLIDER_IMAGE, imageStr)
                }
            }

        }

        override fun onCreateView(
            inflater: LayoutInflater,
            container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
            return inflater.inflate(R.layout.item_slide_image, container, false)
        }

        override fun onActivityCreated(savedInstanceState: …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager2

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

Android ViewPager2 FragmentStateAdapter 显示每个 Fragment 的菜单

我有一个带有 3 个相关片段的底部导航视图的活动。其中之一是带有使用 FragmentStateAdapter 的 ViewPager2 的 Fragment。在适配器的 createfragment(int position) 方法内,我返回另一个 Fragment 的几个实例,其中有一个选项菜单,在它的 onCreate() 中我调用 setHasOptionsMenu(true)。问题是在适配器初始化时,所有片段的菜单都是可见的,而不仅仅是当前可见片段的菜单。在第一次滑动之后,菜单似乎失效了,一切都应该如此。如果我通知适配器有关添加了另一个片段的更改,然后为新添加的片段出现另一个菜单项,也会出现此问题。我看到了一个类似的问题,但答案是在片段的 onResume() 方法中调用 setHasOptionsMenu() ,但这似乎不是处理此问题的正确行为。在评论中,另一个用户建议将 ViewPager2 升级到另一个版本,但我使用的是最新版本。谁能告诉我如何处理这个问题?

android android-fragments android-viewpager2

0
推荐指数
1
解决办法
466
查看次数

每个项目的动态 ViewPager2 高度计算

我正在使用ViewPager2用于显示 3 个适配器项目.. 每个项目都有不同的布局。所以viwepager2在更改viewpager2.

请为Viewpager2.

android android-viewpager2

0
推荐指数
1
解决办法
305
查看次数

如何使用点指示器扩展 ViewPager2?

我目前正在编写一份说明手册,该手册确实有页面 - 并使用ViewPager2.

到目前为止,我已经找到了 的点指示符ViewPager,但没有找到 的点指示符ViewPager2。我想提供更好的视觉反馈,以便人们一开始就可以看到有更多页面。如何以最少的努力使用点指示器扩展 ViewPager2?这不是对场外资源的请求 - 尽管我自己的答案使用了一个库。请随意添加更好(更轻量级)的答案。

java pagination android androidx android-viewpager2

0
推荐指数
1
解决办法
4097
查看次数