我用于paging3在 中显示无尽的列表RecyclerView。当我单击特定项目时,我需要显示详细信息片段。详细信息片段包含一个视图分页器,其适配器也是PagingDataAdapter。也就是说,具有详细信息的片段应该显示我在上一屏幕上选择的元素,并且还可以水平滚动到也逐页加载的其他元素。问题是我无法从某个位置开始在视图寻呼机中显示分页列表。该列表始终从头开始显示。我找不到这个问题的解决方案。是否可以从特定位置开始监听页面源(RemoteMediator)的数据?请帮我:(
android android-view android-recyclerview android-viewpager2 android-paging-3
我当前状态的视频,以便更好地了解我的情况:
\n视频
\RecyclerView 上面的所有内容都在 AppbarLayout 内
具有类似行为的 Reddit 应用示例:
\n视频
目标:
\n1-实现滚动屏幕,视图按从上到下的顺序排列
a)[several views that need to scroll top until gone, their combined height is several screen sizes] \nb)[view that scrolls until it reaches screen top and then sticks there] \nc)[Recy\xd1\x81lerView that scrolls beneath view that sticks on screens top] or [ViewPager with fragments containing RecyclerViews]\nRun Code Online (Sandbox Code Playgroud)\nRecyclerView2-需要它与并ViewPager包含fragments包含一起工作RecyclerViews
3-保留RecyclerViews回收。
\n到目前为止我的解决方案:
\n协调器布局,AppBarLayout 与appbar_scrolling_view_behavior和scroll|exitUntilCollapsed。 …
android android-recyclerview android-coordinatorlayout android-appbarlayout android-viewpager2
我想禁用从右向左滑动ViewPager2。我的导航抽屉里基本上有一个带有 2 页的 viewpager2 元素。我希望我的第二页仅在我单击第一页中的某个元素时显示(从第一页从右向左滑动不应打开第二页),而当我在第二页时,viewpager2 滑动(向左滑动)向右滑动)应该像在 viewpager 中那样滑动。
我尝试扩展ViewPager2类并覆盖触摸事件,但不幸的ViewPager2是它是最终类,因此我无法扩展它。
其次,我尝试使用setUserInputEnabledfalse 方法,但这完全禁用了所有滑动(我只想禁用从右向左滑动)。如果我能找到一些在滑动之前检查当前页面并禁用滑动的侦听器,它可能会起作用。
implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha05'
Run Code Online (Sandbox Code Playgroud)
设置 ViewPager2 的代码
ViewPager2 pager = view.findViewById(R.id.pager);
ArrayList<Fragment> abc = new ArrayList<>();
abc.add(first);
abc.add(second);
navigationDrawerPager.setAdapter(new DrawerPagerAdapter(
this, drawerFragmentList));
pager.setAdapter(new FragmentStateAdapter(this), abc);
Run Code Online (Sandbox Code Playgroud) 是否可以创建类似于 ViewPager 中存在的 PagerTitleStrip 的内容?我的目的是只显示没有 tabLayout 的片段的标题。
FragmentStateAdapter 抛出
java.lang.IllegalStateException:违反了设计假设,
当设备旋转时。我该如何解决这个问题?
private inner class PagerAdapter : FragmentStateAdapter(this) {
private val ids = LongSparseArray<Media>()
override fun getItemCount(): Int = adapter.itemCount
override fun getItemId(position: Int): Long {
return adapter.source!![position].time
}
override fun containsItem(itemId: Long): Boolean {
return ids[itemId] != null
}
}
Run Code Online (Sandbox Code Playgroud)
例外
private inner class PagerAdapter : FragmentStateAdapter(this) {
private val ids = LongSparseArray<Media>()
override fun getItemCount(): Int = adapter.itemCount
override fun getItemId(position: Int): Long {
return adapter.source!![position].time
}
override fun containsItem(itemId: Long): Boolean {
return ids[itemId] != …Run Code Online (Sandbox Code Playgroud) 我为我的项目实现了新的 ViewPager。viewPager2 包含一个片段列表
private class ViewPagerAdapter extends FragmentStateAdapter {
private ArrayList<Integer> classifiedIds;
ViewPagerAdapter(@NonNull Fragment fragment, final ArrayList<Integer> classifiedIds) {
super(fragment);
this.classifiedIds = classifiedIds;
}
@NonNull
@Override
public Fragment createFragment(int position) {
return DetailsFragment.newInstance(classifiedIds.get(position));
}
@Override
public int getItemCount() {
return classifiedIds.size();
}
}
Run Code Online (Sandbox Code Playgroud)
在片段内部我得到了一个水平的 recyclerView
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);
recyclerViewPicture.setLayoutManager(layoutManager);
Run Code Online (Sandbox Code Playgroud)
问题是当我尝试滚动 recyclerview 时,viewPager 触摸并切换到下一个片段
当我使用旧的 ViewPager 时,我没有这个问题
android android-recyclerview android-touch-event android-viewpager2
我为他提供了扩展 FragmentStateAdapter 的 viewpager2 和适配器。我希望用户仅通过单击 tablayout 才能转到另一个页面。我已禁用此 viewpager2 的用户输入。但是当我点击选项卡时,页面之间有快速滑动的动画。但我只想显示新片段。与 FragmentTransaction 类似,但使用 viewpager2 和 tablayout。有谁知道怎么做?
如何使用 ViewPager2 的registerOnPageChangeCallback功能来检查当前可见的 ViewPAger2 片段的位置?if我知道这将由/语句组成when,但不知道实现它的正确方法。
mViewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
if (mViewPager.currentPage) == 0 {
// do something
}
else if (mViewPager.currentPage) == 1 {
// do something
}
else {
// do something
}
super.onPageSelected(position)
}
})
Run Code Online (Sandbox Code Playgroud) 我目前遇到一个错误,该错误继续降低我的应用程序的性能。
该错误不会导致应用程序关闭或崩溃,或者向控制台写入异常。控制台只是简单地报告这个消息:
E/iardini.error0: Invalid ID 0x00000001.
从消息中出现的唯一内容是:
如何复制错误:我在 github 上创建了一个公共存储库,因此您可以下载源代码并享用午餐!您将立即看到错误将显示在控制台内。
错误消息取决于什么?我该如何解决?
提前致谢!
android android-resources android-tablayout android-databinding android-viewpager2
我正在处理ViewPager2我在 viewpager 中有 2 个片段的地方。它工作得很好,但有一个问题,我希望它只是从FragmentTwo滑动到FragmentOne片段,因为它现在正在工作。但是当我将它从FragmentOne滑动到FragmentTwo 时,它将只能从FragmentOne片段的 FirstFragment 子片段滑动。
在此图像中 MainActivity 是放置 viewpager2 的基本活动。它包含 2 个片段,FragmentOne 和 FragmentTwo。FragmentOne 有一个自定义的 viewpager2 用于BottomNavigationView. 它有 3 个片段,第一个是 HomeFragment,这个片段有一个按钮,两个交易到 FragmentTwo。所以我只希望刷卡交易只能从 HomeFragment 发生,而不是从它的孩子或其他两个片段发生。就像 Instagram 一样,我们只能从 HomeFragment 滑动到 ChatFragment。
ViewPagerMainActivity 中的代码
override fun onCreate(savedInstanceState: Bundle?) {
val mViewPager = findViewById<ViewPager2>(R.id.view_pager_main_activity)
mViewPager?.offscreenPageLimit = 2
mViewPager?.apply { // to disable overScrollAnimation
(getChildAt(0) as? RecyclerView)?.overScrollMode = RecyclerView.OVER_SCROLL_NEVER
}
}
internal class MyViewPagerAdapter(fragmentActivity: …Run Code Online (Sandbox Code Playgroud) android android-fragments instagram kotlin android-viewpager2