Я пытаюсь реализовать Нижний лист в одном из своих действий, и я немного смущен тем, как он себя ведет!
Итак, вот проблема, у меня есть действие, в котором я пытаюсь показать нижний лист, и я вижу, что:
если мы не установим свойство
app:behavior_peekHeight
, то нижний лист никогда не будет работатьЕсли вы установите PeekHeight на что-то меньшее, чем 30dp (в основном просто чтобы скрыть его с экрана)
- Если вы установите для
app:behavior_peekHeight
значение более 30 dp в файле макета и попытаетесь установить состояниеbottomSheetBehavior
наSTATE_HIDDEN
в методе onCreate, ваше приложение вылетит с этой ошибкой.
вызванный:
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.Object java.lang.ref.WeakReference.get()' on a null object reference at android.support.design.widget.BottomSheetBehavior.setState(BottomSheetBehavior.jav a:440)
at myapp.activity.SomeActivity.onCreate(SomeActivity.java:75)
Я действительно смущен тем, почему он не позволяет мне скрыть его в onCreate? или почему мы не можем просто установить peekHeight в 0, чтобы он не был виден на экране, если мы не вызываем STATE_EXPANDED
или даже не устанавливая это свойство, оно должно по умолчанию скрывать! или, по крайней мере, я должен иметь возможность установить его как скрытый в моем onCreate!
я что-то упускаю? или поведение BottomSheet жесткое?
мой файл макета для BottomSheet выглядит примерно так:
<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:background="@android:color/white"
android:layout_height="100dp"
android:orientation="vertical"
app:behavior_hideable="true"
app:behavior_peekHeight="40dp" <!-- I cant set this less than 30dp just to hide-->
app:layout_behavior="@string/bottom_sheet_behavior"
tools:context="someActivity"
android:id="@+id/addressbottomSheet"
tools:showIn="@layout/some_activity">
в своей деятельности я делаю что-то вроде этого:
@InjectView(R.id.addressbottomSheet)
View bottomSheetView;
@Override
protected void onCreate(Bundle savedInstanceState) {
....
bottomSheetBehavior = BottomSheetBehavior.from(bottomSheetView);
// only if I have set peek_height to more than 30dp
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
}
В моем onclick я делаю это:
@Override
public void onItemClick(View view, int position) {
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}