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