android - Viewpager 滑动不适用于回收站视图
问题描述
我在同一个 Activity 中有一个 ViewPager 和 RecyclerView 并且这两个视图都重叠(RecyclerView 在前面,ViewPager 在后面)。当我在空白空间上滑动时,我的 ViewPager 滑动可以正常工作,但是当我在 RecyclerView 上滑动时,viewpager 滑动不起作用。我在 Recyclerview 中有按钮和搜索栏。当用户还滑动 RecyclerView 时,我想 ViewPager 滑动,除了 seekbar。
我的布局是:
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/viewPager"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true" />
<RelativeLayout
android:id="@+id/imagesLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/bottomRelativeLayout"
android:layout_below="@+id/timerLayout"
android:layout_marginBottom="5dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:visibility="gone">
<android.support.v7.widget.RecyclerView
android:id="@+id/myRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="5dp"
android:clickable="true"
android:fadingEdgeLength="30dp"
android:focusable="true"
android:gravity="center"
android:horizontalSpacing="3dp"
android:listSelector="@android:color/transparent"
android:numColumns="3"
android:overScrollMode="never"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingBottom="15dp"
android:paddingTop="15dp"
android:requiresFadingEdge="vertical"
android:scrollbars="none" />
</RelativeLayout>
我的java代码是:
imagesRecyclerView = (RecyclerView) findViewById(R.id.myRecyclerView);
int numberOfColumns = 3;
imagesRecyclerView.setLayoutManager(new GridLayoutManager(context, numberOfColumns));
imagesRecyclerView.getItemAnimator().setChangeDuration(0);
imagesRecyclerView.setHasFixedSize(false);
我搜索了很多关于这个主题但我找不到任何解决方案。我的 viewpager 适配器看起来像:
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
FragmentManager fm;
private SparseArray<Fragment> registeredFragments = new SparseArray<>();
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
this.fm=fm;
}
@Override
public Fragment getItem(int position) {
Fragment fragment = new ImageFragment();
Bundle args = new Bundle();
args.putSerializable("TabObject", Constants.tabs.get(position));
fragment.setArguments(args);
return fragment;
}
@Override
public int getCount() {
return Constants.tabs.size();
}
@SuppressLint("RestrictedApi")
public List<Fragment> getFragments(){
return fm.getFragments();
}
@Override
public int getItemPosition(Object object) {
if (object instanceof ImageFragment) {
// Create a new method notifyUpdate() in your fragment
// it will get call when you invoke
// notifyDatasetChaged();
// ((SoundsFragment) object).updateGridData();
}
//don't return POSITION_NONE, avoid fragment recreation.
return super.getItemPosition(object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = (Fragment) super.instantiateItem(container, position);
registeredFragments.put(position, fragment);
return fragment;
}
public Fragment getRegisteredFragment(int position) {
return registeredFragments.get(position);
}
@Override
public CharSequence getPageTitle(int position) {
return "OBJECT " + (position + 1);
}
}
解决方案
您可以使用
1)
ViewCompat.setNestedScrollingEnabled(recyclerView, false);
2)在您的 recyclerView 标签内
app:layout_behavior="@string/appbar_scrolling_view_behavior"
推荐阅读
- c++ - C++ 字符串类效率
- android - 无法从文档引用中获取数据
- mysql - 以随机(非 root)linux 用户身份运行 MySQL 一个预填充的 docker 容器?
- javascript - 如何以角度创建动态DOM元素?
- java - 不能在方法中编写语句。java类的功能。“错误:”;“预期”
- c# - 如何正确设置 Autofac IIndex
在多租户容器中工作? - ruby-on-rails - 通过使用 Rails 中的 Cocoon gem 的嵌套属性更新关联模型上的多个复选框
- r - R:通过分隔符拆分字符串向量并重新排列
- azure-active-directory - Microsoft Graph Webhook 和多租户通知?
- javascript - Ruby - 是否可以在按钮上使用 FancyBox?