When BottomSheet is initialized, it is partially displayed at the bottom of the screen, then when you try to drag it to the top, so that it is fully displayed, it slides off and disappears. How to fix it? Or how to make that all BottomSheet appear on the screen at once?
Video of what it looks like: https://www.youtube.com/watch?v=58bhlc-KfYA&feature=youtu.be
Activation code:
public class FirstscreenActivity extends AppCompatActivity implements RecyclerItemClickListener.OnItemClickListener, ItemAdapter.ItemListener { private BottomSheetDialog mBottomSheetDialog; BottomSheetBehavior behavior; private ItemAdapter mAdapterItem; private FloatingActionButton floatButton; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.front); mList = (RecyclerView) findViewById(R.id.list); mList.setHasFixedSize(true); mLayoutManager = new LinearLayoutManager(getApplicationContext()); mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); mList.addOnItemTouchListener(new RecyclerItemClickListener(this, this)); mList.setLayoutManager(mLayoutManager); floatButton = (FloatingActionButton) findViewById(R.id.float_button); floatButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showBottomSheetDialog(); } }); View bottomSheet = findViewById(R.id.bottom_sheet; behavior = BottomSheetBehavior.from(bottomSheet); behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { @Override public void onStateChanged(@NonNull View bottomSheet, int newState) { // React to state change } @Override public void onSlide(@NonNull View bottomSheet, float slideOffset) { // React to dragging events } }); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView); recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(new LinearLayoutManager(this)); mAdapterItem = new ItemAdapter(createItems(), this); recyclerView.setAdapter(mAdapterItem); } @Override protected void onResume() { super.onResume(); RecyclerViewAdapter adapter = (RecyclerViewAdapter) mList.getAdapter(); adapter.notifyDataSetChanged(); } private void showBottomSheetDialog() { if (behavior.getState() == BottomSheetBehavior.STATE_EXPANDED) { behavior.setState(BottomSheetBehavior.STATE_COLLAPSED); } mBottomSheetDialog = new BottomSheetDialog(this); View view = getLayoutInflater().inflate(R.layout.sheet, null); RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(new ItemAdapter(createItems(), new ItemAdapter.ItemListener() { @Override public void onItemClick(Item item) { if (mBottomSheetDialog != null) { mBottomSheetDialog.dismiss(); } } })); mBottomSheetDialog.setContentView(view); mBottomSheetDialog.show(); mBottomSheetDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { mBottomSheetDialog = null; } }); } @Override protected void onDestroy() { super.onDestroy(); mAdapterItem.setListener(null); } public List<Item> createItems() { ArrayList<Item> items = new ArrayList<>(); items.add(new Item(R.drawable.camera, "from new shoots")); items.add(new Item(R.drawable.folder_multiple_image, "from ready images")); return items; } @Override public void onItemClick(Item item) { behavior.setState(BottomSheetBehavior.STATE_COLLAPSED); } } RecyclerView Adapter for BottomSheet:
public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ViewHolder> { private List<Item> mItems; private ItemListener mListener; public ItemAdapter(List<Item> items, ItemListener listener) { mItems = items; mListener = listener; } public void setListener(ItemListener listener) { mListener = listener; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ViewHolder(LayoutInflater.from(parent.getContext()) .inflate(R.layout.adapter, parent, false)); } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.setData(mItems.get(position)); } @Override public int getItemCount() { return mItems.size(); } public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { public ImageView imageView; public TextView textView; public Item item; public ViewHolder(View itemView) { super(itemView); itemView.setOnClickListener(this); imageView = (ImageView) itemView.findViewById(R.id.imageView); textView = (TextView) itemView.findViewById(R.id.textView); } public void setData(Item item) { this.item = item; imageView.setImageResource(item.getDrawableResource()); textView.setText(item.getTitle()); } @Override public void onClick(View v) { if (mListener != null) { mListener.onItemClick(item); } } } public interface ItemListener { void onItemClick(Item item); } } xml activation:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/my_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#118b0a" android:elevation="4dp" android:theme="@style/ThemeOverlay.AppCompat.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> <android.support.v7.widget.RecyclerView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/my_toolbar" /> <android.support.design.widget.FloatingActionButton android:id="@+id/float_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_margin="16dp" android:src="@drawable/add_white" /> <android.support.design.widget.CoordinatorLayout android:layout_width="0dp" android:layout_height="0dp"> <LinearLayout android:id="@+id/bottom_sheet" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#fff" android:gravity="center" android:orientation="vertical" app:layout_behavior="@string/bottom_sheet_behavior"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:layout_marginTop="16dp" android:background="#fff" /> </LinearLayout> </android.support.design.widget.CoordinatorLayout> </RelativeLayout> xml RecyclerView Item:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/selectableItemBackground" android:clickable="true" android:gravity="center_vertical" android:orientation="horizontal"> <ImageView android:id="@+id/imageView" android:layout_width="40dp" android:layout_height="40dp" android:layout_margin="16dp" android:src="@mipmap/ic_launcher" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="16dp" android:layout_marginStart="16dp" android:gravity="center_vertical" android:textColor="#787878" android:textSize="22sp" /> </LinearLayout>