简体   繁体   中英

ViewPager in DrawerLayout

I put a ViewPager in a DrawerLayout. Now when I try to scroll ViewPager, menu is closed

在此处输入图片说明

please tell me how to make the menu does not close when I scroll viewPager

viewPager adapter:

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);
}
}

Just add an onTouchListener . When you touch the screen on the ViewPager (action_down) disallow parent to intercept the event.

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;
    }
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM