我的AppCompatActivity
布局包含一个FrameLayout
。在FrameLayout
中,我放置了一个包含更复杂布局的片段:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/top_toolbar" />
<android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/bottom_toolbar" />
<com.passionusnetworks.lype.plugins.SlidingTabLayout
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/abc_action_bar_default_height_material"
android:background="#00000000"
android:elevation="2dp" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF" />
<include layout="@layout/navigation_drawer" />
</android.support.v4.widget.DrawerLayout>
</android.support.design.widget.CoordinatorLayout>
</RelativeLayout>
然后我将2 Fragment
放入ViewPager
。使用我的SlidingTabLayout
,我可以通过按下这些标签来切换我的2个片段。在这些片段中,有一个RecyclerView
。我的问题是没有触摸事件似乎到达我的片段(RecyclerView
s无法滚动,我无法在ViewPager
的片段之间滑动。我试图放置一些OnTouchListener
在所有级别,但我永远不会得到一个MotionEvent
。
我不知道该怎么做才能找到我无法在我的片段中获得任何触摸事件的原因。有人有建议吗?
答案 0 :(得分:0)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout containing a title and body text.
ViewGroup rootView = (ViewGroup) inflater
.inflate(R.layout.fragment_slide, container, false);
LinearLayout layout = (LinearLayout)rootView.findViewById(R.id.layout)// get your root layout
layout.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.v(null, "TOUCH EVENT"); // handle your fragment number here
return false;
}
});
return rootView;
}
答案 1 :(得分:0)
为了获得正确的行为,我最终将CoordinatorLayout
放在DrawerLayout
内,将SlidingTabLayout
更改为TabLayout
(并将其移至{{1}内} AppBarLayout
)。我还在@layout/top_toolbar
添加了app:layout_behavior="@string/appbar_scrolling_view_behavior"
。
我的代码基于the great Cheesesquare demo。