在使用 PagerAdapter 和 ViewPager 中的选项卡之间滑动时出现问题
Posted
技术标签:
【中文标题】在使用 PagerAdapter 和 ViewPager 中的选项卡之间滑动时出现问题【英文标题】:Problem in swipe between tabs in Use PagerAdapter and ViewPager 【发布时间】:2018-11-05 10:18:56 【问题描述】:我将 PagerAdapter 用于 ViewPager 适配器,没有任何片段,只有一个选项卡布局,没关系,我可以放置我的数据,然后......但我在滑动时遇到问题......它是颠倒的......我想要从右向左,但从左向右滑动...
ViewPagerAdapter.java
public class ViewPagerAdapter extends PagerAdapter
private static final String TAG = "ViewPagerAdapter";
private Context context;
private List<PersonItem> personItemList;
public ViewPagerAdapter(Context context, List<PersonItem> personItemList)
this.context = context;
this.personItemList = personItemList;
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object)
return view == object;
@Override
public int getCount()
return personItemList.size();
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object)
container.removeView((View) object);
@Nullable
@Override
public CharSequence getPageTitle(int position)
return personItemList.get(position).getTabTitle();
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position)
LayoutInflater inflater = LayoutInflater.from(context);
ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.fragment_layout, container, false);
PersonItem personItem = personItemList.get(position);
ImageView imgPerson = layout.findViewById(R.id.img_person);
TextView txtPersonContent = layout.findViewById(R.id.txt_person_content);
if (personItem.getImageUrl() != null)
Glide.with(context)
.load(personItem.getImageUrl())
.into(imgPerson);
else
imgPerson.setVisibility(View.GONE);
if (personItem.getContent() != null)
txtPersonContent.setText(personItem.getContent());
container.addView(layout);
return layout;
ViewPager layout.xml
<?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">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_
android:layout_
android:id="@+id/coordinator"
tools:context=".activity.PersonalityDetailsActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_
android:layout_
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<include
android:id="@+id/personality_toolbar"
layout="@layout/personality_details_toolbar"
android:layout_
android:layout_
android:layout_marginTop="3dp"/>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs"
android:layout_
android:layout_
android:layout_marginTop="5dp"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:contextClickable="true"
android:focusable="true"
android:scrollbarSize="30dp"
android:textAlignment="center"
android:layoutDirection="rtl"
app:tabGravity="fill"
app:tabIndicatorColor="@color/colorAccent"
app:tabMode="scrollable"
app:tabPadding="3dp"
app:tabPaddingEnd="10dp"
app:tabSelectedTextColor="@color/colorAccent"
app:tabTextColor="@android:color/white"/>
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_
android:layout_
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>
在活动中设置 ViewPager
//set adapter on View Pager
viewPagerAdapter = new ViewPagerAdapter(this, personItems);
viewPager.setAdapter(viewPagerAdapter);
viewPager.setCurrentItem(0);
tabLayout.setupWithViewPager(viewPager);
输出在这里:
The Gif link
【问题讨论】:
你有什么问题? 你看到 gif 了吗?我想要 RTL 目录,但它是 LTR ... 【参考方案1】:试试这个
步骤 1. 更改 View 页面的旋转,
viewpager.setRotationY(180);
Step 2. 然后再次改变片段容器的方向 这是viewpager的孩子,
view_pager_fragment_parent_viewgroup.setRotationY(180);
For more info
【讨论】:
tnx 亲爱的,但我的孩子不是 RecyclerView ......亲爱的我找到了它 使用视图组顶部fragment_layout
而不是 recyclerView
。
Drae Thnx .. 我的情况我有布局并为此设置它。 layout.setRotationY(180)
这是我的解决方案【参考方案2】:
您也可以尝试将android:layoutDirection="rtl"
添加到您的ViewPager
:
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_
android:layout_
android:layoutDirection="rtl"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
并将当前页面设置为最后一页以防万一:
viewPagerAdapter = new ViewPagerAdapter(this, personItems);
viewPager.setAdapter(viewPagerAdapter);
viewPager.setCurrentItem(viewPagerAdapter.getCount() - 1); // instead of 0
tabLayout.setupWithViewPager(viewPager);
【讨论】:
不,亲爱的。这不是我的解决方案......最后一项中的选择器设置和问题尚未 哦,我的错,如果viewPager.setCurrentItem(viewPagerAdapter.getCount() - 1)
不起作用,也许你可以放弃它,但我可能错了。
亲爱的我该怎么办?
对不起,我的意思是您是否可以尝试将初始当前项目设置为最后一页。我刚刚更新了我的答案。以上是关于在使用 PagerAdapter 和 ViewPager 中的选项卡之间滑动时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
有关ViewPager使用及解决ViewPager和PagerAdapter中调用notifyDataSetChanged失效问题