"Perhatikan bahwa Anda tidak dapat memanggil metode sebelum melihat tata letak."
Teks di atas adalah petunjuknya.
Dialog memiliki pendengar yang diaktifkan setelah dialog ditampilkan . Dialog tidak dapat ditampilkan jika tidak ditata.
Jadi, di onCreateDialog()
modal lembar bawah Anda ( BottomSheetFragment
), tepat sebelum mengembalikan dialog (atau di mana saja, setelah Anda memiliki referensi ke dialog), panggil:
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);
}
});
Dalam kasus saya, kebiasaan saya BottomSheet
ternyata:
@SuppressWarnings("ConstantConditions")
public class ShareBottomSheetFragment extends AppCompatDialogFragment {
@NonNull @Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
BottomSheetDialog dialog =
new BottomSheetDialog(getActivity(), R.style.Haute_Dialog_ShareImage);
dialog.setContentView(R.layout.dialog_share_image);
dialog.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
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);
}
});
SwitchCompat switchview = (SwitchCompat) dialog.findViewById(R.id.switchview);
switchview.setTypeface(FontCache.get(dialog.getContext(), lookup(muli, NORMAL)));
return dialog;
}
}
Beri tahu saya jika ini membantu.
MEMPERBARUI
Perhatikan bahwa Anda juga dapat mengganti BottomSheetDialogFragment
sebagai:
public class SimpleInitiallyExpandedBottomSheetFragment extends BottomSheetDialogFragment {
@NonNull @Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
BottomSheetDialog dialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState);
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);
}
});
return dialog;
}
}
Tapi saya benar-benar tidak melihat mengapa ada orang yang ingin melakukan itu karena pangkalan BottomSheetFragment
tidak melakukan apa pun selain mengembalikan a BottomSheetDialog
.
UPDATE UNTUK ANDROIDX
Saat menggunakan AndroidX, sumber daya yang sebelumnya ditemukan di android.support.design.R.id.design_bottom_sheet
sekarang dapat ditemukan di com.google.android.material.R.id.design_bottom_sheet
.
BottomSheetDialogFragment
tersendat (tampak melewatkan bingkai dalam animasi pembuka) saat beralih dari perilaku diciutkan ke diperluas. Sunting: Diuji ini pada perangkat Android Marshmallow dan KitKat