【发布时间】:2016-03-20 05:54:05
【问题描述】:
我正在尝试在我的一项活动中实施底部工作表,但我对它的行为方式感到有点困惑!
所以这是问题所在,我有一个活动,我试图显示底部表,我看到了:
如果我们不设置
app:behavior_peekHeight属性,那么底部表格将永远无法工作如果您将 PeekHeight 设置为小于 30dp(基本上只是为了将其从屏幕上隐藏)
- 如果您在布局文件中将
app:behavior_peekHeight设置为超过 30dp,并尝试在您的 onCreate 方法中将bottomSheetBehavior的状态设置为STATE_HIDDEN,您的应用会因此错误而崩溃
原因:
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);
}
【问题讨论】:
-
您是否找出第一种情况的原因:如果我们不设置 app:behavior_peekHeight 属性,那么底部工作表将永远无法工作?我也一样。
-
@LạngHoàng 这个答案可能会帮助你stackoverflow.com/a/36236743/3000299
标签: android android-support-library bottom-sheet