DrawerLayout 中的 ViewPager

ViewPager in DrawerLayout

我在 DrawerLayout 中放置了一个 ViewPager。 现在,当我尝试滚动 ViewPager 时,菜单已关闭

请告诉我如何在滚动 viewPager 时使菜单不关闭

viewPager 适配器:

public class MenuNewsAdapter extends PagerAdapter {

ArrayList<News> news = new ArrayList<>();
Context context;

public MenuNewsAdapter(Context context, ArrayList<News> news) {
    this.news = news;
    this.context = context;
}

@Override
public int getCount() {
    return news.size();
}


@Override
public Object instantiateItem(final ViewGroup container, final int position) {
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View rowView = inflater.inflate(R.layout.list_menu_news, container, false);

    ...

    rowView.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(container.getContext(), NewsViewActivity.class);
            intent.putExtra("news_id", news.get(position).newsId);
            container.getContext().startActivity(intent);
        }
    });

    container.addView(rowView);
    return rowView;
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return view == ((LinearLayout) object);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((LinearLayout) object);
}
}

只需添加一个 onTouchListener。当您在 ViewPager (action_down) 上触摸屏幕时,不允许父级拦截该事件。

viewPager.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int action = event.getAction();
        switch (action) {
        case MotionEvent.ACTION_DOWN:
            // Disallow Drawer to intercept touch events.
            v.getParent().requestDisallowInterceptTouchEvent(true);
            break;

        case MotionEvent.ACTION_UP:
            // Allow Drawer to intercept touch events.
            v.getParent().requestDisallowInterceptTouchEvent(false);
            break;
        }

        // Handle viewPager touch events.
        v.onTouchEvent(event);
        return true;
    }
});