我有viewPager2和FragmentStateAdapter,还有Fragement1,2,3 4,我在fragment2,想去掉fragment3,在fragment2后显示fragment4。问题是它总是向我显示 fragment3(data),调试显示 fragment3 已被删除,但显示的页面仍然有 fragment3 内容。
适配器:
class TipsAdapter(
private val items: MutableList<TripPage>,
context: FragmentActivity
) : FragmentStateAdapter(context) {
private val fragmentFactory = context.supportFragmentManager.fragmentFactory
private val classLoader = context.classLoader
override fun getItemCount(): Int = items.size
override fun createFragment(position: Int): Fragment {
val pageInfo = items[position]
val fragment = fragmentFactory.instantiate(classLoader, pageInfo.fragmentClass.name)
fragment.arguments = Bundle().also { it.putParcelable(PAGE_INFO, pageInfo) }
return fragment
}
fun getFragmentName(position: Int) = items[position].fragmentClass.simpleName
fun removeFragment(position: Int) {
items.removeAt(position)
notifyItemRemoved(position)
notifyItemRangeChanged(position, items.size)
notifyDataSetChanged()
}
Run Code Online (Sandbox Code Playgroud)
}
删除片段代码:
if ((view_pager.adapter …Run Code Online (Sandbox Code Playgroud) android android-viewpager fragmentstatepageradapter android-viewpager2
有一些关于让 ViewPager 使用不同高度的项目的帖子,这些项目以扩展ViewPager自身为中心,以修改其onMeasure以支持这一点。
然而,鉴于它ViewPager2被标记为 final 类,扩展它不是我们可以做的事情。
有谁知道是否有办法解决这个问题?
视图 1 = 200dp
视图 2 = 300dp
当 ViewPager2 (layout_height="wrap_content" ) 加载时——查看 View1,它的高度将为 200dp。
但是当我滚动到View2时,高度仍然是200dp;View2 的最后 100dp 被截断。
我知道有办法改变ViewPager编程幻灯片的动画持续时间(这里)。
但它不工作 ViewPager2
我试过这个:
try {
final Field scrollerField = ViewPager2.class.getDeclaredField("mScroller");
scrollerField.setAccessible(true);
final ResizeViewPagerScroller scroller = new ResizeViewPagerScroller(getContext());
scrollerField.set(mViewPager, scroller);
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
IDE 给我关于“mScroller”的警告:
无法解析字段“mScroller”
如果我们运行此代码将无法工作并在下面给我们错误:
No field mScroller in class Landroidx/viewpager2/widget/ViewPager2; (declaration of 'androidx.viewpager2.widget.ViewPager2' appears in /data/app/{packagename}-RWJhF9Gydojax8zFyFwFXg==/base.apk)
Run Code Online (Sandbox Code Playgroud)
那么我们如何才能实现这个功能呢?
我想使用View Pager2左右页面的预览来实现 Carousel ,如下所示:
最初我使用的是支持的视图 pager1。现在我认为它被删除了
viewPagerhost.setPageMargin(20);
Run Code Online (Sandbox Code Playgroud)
知道我们如何使用 View Pager 2 实现这一点
我想将com.google.android.material.tabs.TabLayout组件与Android的新ViewPager实现一起使用androidx.viewpager2.widget.ViewPager2。但是,setupWithViewPager(..)提供的方法TabLayout仅支持旧的ViewPager实现。有没有一种方法可以轻松地将a绑定TabLayout到ViewPager2组件?
找不到删除 ViewPager2 过度滚动阴影动画的方法。我知道在 ViewPager 上,您可以直接将 overscrollMode 属性设置为 never,但是,它不适用于 ViewPager2
已经尝试了以下
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"/>
Run Code Online (Sandbox Code Playgroud)
binding.viewPager.apply {
adapter = adapter
orientation = ViewPager2.ORIENTATION_VERTICAL
overScrollMode = ViewPager2.OVER_SCROLL_NEVER
offscreenPageLimit = if (containsVideo) 2 else 5
}
Run Code Online (Sandbox Code Playgroud) 我正在将我的 ViewPager 迁移到新的 ViewPager2。不幸的是,对于这个新类,setOnTouchListener从未调用过。
mViewPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
LogUtils.LOGD("XXXX", "motionEvent.getAction()=" + motionEvent.getAction());
...
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
你知道我该如何解决吗?
非常感谢你们!
这个问题是针对新的ViewPager2类的。
旧的 ViewPager有一个类似的问题,但解决方案需要扩展ViewPager。但是,ViewPager2 是最终版本,因此无法扩展。
在我的情况下,我有一个包含三个不同片段的 ViewPager2。其中一个片段比其他两个片段高得多,这意味着当您滑动到较短的片段之一时,会有很多空白空间。那么如何有效地将 ViewPager2 包裹到当前片段的高度呢?
android android-fragments android-viewpager android-viewpager2
我遇到了麻烦,我认为是我CoordinatorLayout的错,但不确定。我ViewPager2在 a 内部使用ConstraintLayout,我使用CoordinatorLayoutlike BottomSheet。但是当我拖动以隐藏它时效果不佳。我替换了ViewPager2byViewPager并且效果很好。我希望你能帮助我。
这是我的 XML 文件:
<androidx.coordinatorlayout.widget.CoordinatorLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/bottom_sheet_behavior"
app:behavior_hideable="false"
app:behavior_peekHeight="60dp" >
<androidx.viewpager2.widget.ViewPager2
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="4:3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:background="#0000FF"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud) android android-coordinatorlayout bottom-sheet android-viewpager2