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)
.
이상 해요. 이 코드 줄을 DEBUG 모드에서 Android Monitor의 Watches에 추가하고 정상적으로 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 기기에서 테스트