アクティビティの 1 つでボトム シートを実装しようとしていますが、その動作にちょっと混乱しています!
ここに問題があります。ボトムシートを表示しようとしているアクティビティがあり、次のことがわかります。
プロパティを設定しないと
app:behavior_peekHeight
、Bottom シートは機能しませんPeekHeight を 30dp 未満に設定した場合 (基本的には画面から非表示にするため)
app:behavior_peekHeight
レイアウト ファイルで 30 dp 以上に設定し、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);
}