У меня есть представление ресайклера, которое содержит 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) {
}
});
}