Перелистывание Viewpager не работает с видом рециркулятора - PullRequest
0 голосов
/ 22 октября 2018

У меня ViewPager и RecyclerView в одном и том же Activity, и оба этих вида перекрываются (RecyclerView находится спереди, а ViewPager сзади).Моя прокрутка ViewPager работает правильно, когда я провожу по пустому пространству, но когда я провожу по RecyclerView, салфетка по ViewPager не работает.У меня есть кнопка и панель поиска в Recyclerview.Я хочу провести ViewPager, когда пользователь также проводит пальцем по RecyclerView, кроме панели поиска.

Мой макет:

<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 Ответ

0 голосов
/ 23 октября 2018

вы можете использовать

1)

ViewCompat.setNestedScrollingEnabled(recyclerView, false);

2) внутри тега recylerView

app:layout_behavior="@string/appbar_scrolling_view_behavior"
...