我正在开发一个Android应用程序,其中我有一个NavigationView。随着 NavigationView
我的Layout文件由一个LinearLayout组成。为了使NavigationView的菜单项可以点击,我实现了以下功能 NavigationView.OnNavigationItemSelectedListener
的接口。但是,在点击了这个项目之后,方法 onNavigationItemSelected
没有被叫到。后来我发现,通过 将NavigationView放在最后但整个过程都能如期进行。谁能解释一下这种行为?
如果你看一下DrawerLayout's的 onInterceptTouchEvent
方法,你会看到这个方法在一个叫做 ACTION_DOWN
事件。
final View child = mLeftDragger.findTopChildUnder((int) x, (int) y);
if (child != null && isContentView(child)) {
interceptForTap = true;
}
这将导致 onInterceptTouchEvent
返回 true
导致的点击事件将被从子视图中窃取,并被调用在 DrawerLayout
而不是。
ViewDragHelper.findTopChildUnder
只是以相反的顺序扫描子代,所以它先找到内容视图,因为你把它放在最后。