Сенсорный viewpager2 внутри recyclerview - PullRequest
0 голосов
/ 13 июля 2020

У меня есть представление ресайклера, которое содержит ViewPager2 в качестве дочернего элемента. Всякий раз, когда я касаюсь родительского recyclerview, событие касания не передается в ViewPager2.

Вот мой адаптер RecyclerView

    @Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    
    LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
    context = parent.getContext();
    View view;

    

    view = layoutInflater.inflate(R.layout.activity_related_events_vp, parent, false);
    fragmentActivity = (FragmentActivity) view.getContext();

    return new ViewHolderOne(view);

}

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {


    RelatedEventsVpAdapter adapter = new RelatedEventsVpAdapter(fragmentActivity);
    viewHolderOne.relatedEventsVp.setAdapter(adapter);
    viewHolderOne.relatedEventsVp.setOffscreenPageLimit(5);
    viewHolderOne.relatedEventsVp.setPageTransformer(new CardStackTransformer());


}

@Override
public int getItemCount() {
    return 5;
}

class ViewHolderOne extends RecyclerView.ViewHolder {

    ViewPager2 relatedEventsVp;
    public ViewHolderOne(@NonNull View itemView) {
        super(itemView);
        relatedEventsVp = (ViewPager2) itemView.findViewById(R.id.relatedEventsVP);
    }
}

public class CardStackTransformer implements ViewPager2.PageTransformer {
    @Override
    public void transformPage(@NonNull View page, float position) {

        if(position>=0)
        {
            page.setScaleX(0.8f - 0.04f*position);
            page.setScaleY(0.8f);

            page.setTranslationX(-page.getWidth()*position);
            page.setTranslationY(30*position);
        }

    }
}

А вот и моя активность просмотра recycler (я пытался вернуть false внутри onInterceptTouchEvent)

publi c класс MainView расширяет AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_view);
    initRecyclerView();
}

private void initRecyclerView() {
    LinearLayoutManager layoutManager = new LinearLayoutManager(this,
            LinearLayoutManager.HORIZONTAL, false);
    RecyclerView rv = (RecyclerView) findViewById(R.id.rv_parent);
    rv.setLayoutManager(layoutManager);
    PagerSnapHelper snapHelper = new PagerSnapHelper();
    snapHelper.attachToRecyclerView(rv);
    MainViewAdapter adapter = new MainViewAdapter();
    rv.setAdapter(adapter);
    rv.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
        @Override
        public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {

            return false;
        }

        @Override
        public void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {

        }

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...