Following are my xmls
MainView
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Your content -->
<include layout="@layout/content_main"/>
<!-- Bottom Sheet -->
<include layout="@layout/main_bottom_sheet"/>
</android.support.design.widget.CoordinatorLayout>
BottomSheet View
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bottom_navigation_sheet"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:orientation="vertical"
app:behavior_peekHeight="56dp"
app:layout_behavior="@string/bottom_sheet_behavior">
<FrameLayout
android:id="@+id/fragment_bottom_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
RecycleView Screen
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/toolbar_height"
android:background="@color/alabaster"
android:elevation="@dimen/elevation_normal"
android:orientation="horizontal"
tools:targetApi="lollipop">
<FrameLayout
android:id="@+id/search_as_you_type_back_button"
android:layout_width="@dimen/toolbar_height"
android:layout_height="@dimen/toolbar_height"
android:foreground="?selectableItemBackground">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/accessibility_back"
app:srcCompat="@drawable/ic_arrow_back"/>
</FrameLayout>
<EditText
android:id="@+id/search_as_you_type_edit_text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/margin_medium"
android:layout_weight="1"
android:background="@color/transparent"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center_vertical"
android:imeOptions="actionSearch"
android:inputType="text"
android:textColor="@color/darkest_grey"
android:textSize="@dimen/text_medium"
tools:text="Chocolate"/>
<FrameLayout
android:id="@+id/search_as_you_type_close_container"
android:layout_width="?attr/actionBarSize"
android:layout_height="?attr/actionBarSize"
android:foreground="?selectableItemBackground"
android:visibility="invisible">
<ImageView
android:id="@+id/search_as_you_type_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/accessibility_close"
app:srcCompat="@drawable/ic_cancel_grey_24dp"/>
</FrameLayout>
</LinearLayout>
<ViewFlipper
android:id="@+id/view_flipper"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:inAnimation="@android:anim/fade_in"
android:outAnimation="@android:anim/fade_out">
<android.support.v7.widget.RecyclerView
android:id="@+id/auto_suggest_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:nestedScrollingEnabled="true"/>
</ViewFlipper>
</LinearLayout>
Fragment bottom container layout will be inflated with a fragment which has recyclerview screen. The Recyclerview here is not scrolling after populating it with data. As well its not getting adjusted when the keyboard pops up. I tried setting windowssoftInputMode. Could someone help in how to solve this.
A nested RecyclerView is an implementation of a RecyclerView within a RecyclerView. An example of such a layout can be seen in a variety of apps such as the Play store where the outer (parent) RecyclerView is of Vertical orientation whereas the inner (child) RecyclerViews are of horizontal orientations.
Disable drag of BottomSheetDialogFragment It can also be disabled by overriding onStateChanged() . This will set the expanded state even if user drags the view.
Today, suddenly Recyclerview. Viewholder became deprecated. Other, android project is no deprecated.
A LayoutManager is responsible for measuring and positioning item views within a RecyclerView as well as determining the policy for when to recycle item views that are no longer visible to the user.
This is the working code for RecyclerView
inside BottomSheet
XML:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerViewMore"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusableInTouchMode="true"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</RelativeLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>
In Java in onCreateView
B.recyclerViewMore.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.getParent().requestDisallowInterceptTouchEvent(true);
v.onTouchEvent(event);
return true;
}
});
lincy's solution didn't work for me. The events never got through to the OnTouchListener
.
My solution is to wrap the RecyclerView
with a custom layout that hooks into dispatchTouchEvent
:
<info.mschmitt.view.TouchEventInterceptorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</info.mschmitt.view.TouchEventInterceptorLayout>
The code for TouchEventInterceptorLayout
(constructors removed):
public class TouchEventInterceptorLayout extends FrameLayout {
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
boolean handled = super.dispatchTouchEvent(ev);
requestDisallowInterceptTouchEvent(true);
return handled;
}
}
That will recursively disable touch event handling in all parents for the current touch interaction, leaving only the RecyclerView
as a target for processing.
Why all of this is necessary I don't know. Maybe it's a bug in Google's BottomSheet implementation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With