dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
BottomSheetDialog d = (BottomSheetDialog) dialog;
FrameLayout bottomSheet = (FrameLayout) d.findViewById(android.support.design.R.id.design_bottom_sheet);
BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);
}
});
nullを返すBottomSheetBehavior.from(bottomSheet)
ため、でNullPointExceptionに遭遇しましたd.findViewById(android.support.design.R.id.design_bottom_sheet)
。
おかしいです。このコード行をAndroidモニターの時計にデバッグモードで追加すると、Framelayoutが正常に返されることがわかりました。
wrapInBottomSheet
BottomSheetDialogのコードは次のとおりです。
private View wrapInBottomSheet(int layoutResId, View view, ViewGroup.LayoutParams params) {
final CoordinatorLayout coordinator = (CoordinatorLayout) View.inflate(getContext(),
R.layout.design_bottom_sheet_dialog, null);
if (layoutResId != 0 && view == null) {
view = getLayoutInflater().inflate(layoutResId, coordinator, false);
}
FrameLayout bottomSheet = (FrameLayout) coordinator.findViewById(R.id.design_bottom_sheet);
BottomSheetBehavior.from(bottomSheet).setBottomSheetCallback(mBottomSheetCallback);
if (params == null) {
bottomSheet.addView(view);
} else {
bottomSheet.addView(view, params);
}
if (shouldWindowCloseOnTouchOutside()) {
coordinator.findViewById(R.id.touch_outside).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isShowing()) {
cancel();
}
}
});
}
return coordinator;
}
時折、私はそれR.id.design_bottom_sheet
がに等しくないことに気づきましたandroid.support.design.R.id.design_bottom_sheet
。それらは異なるR.javaで異なる値を持っています。
だから私はに変更android.support.design.R.id.design_bottom_sheet
しR.id.design_bottom_sheet
ます。
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
BottomSheetDialog d = (BottomSheetDialog) dialog;
FrameLayout bottomSheet = (FrameLayout) d.findViewById(R.id.design_bottom_sheet);
BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);
}
});
NullPointExceptionはもうありません。
BottomSheetDialogFragment
折りたたまれた動作から展開された動作に移行するときに、見た目がぎくしゃくします(オープニングアニメーションのフレームをスキップするように見えます)。編集:Android MarshmallowおよびKitKatデバイスでこれをテスト