"ध्यान दें कि आप लेआउट देखने से पहले विधि को कॉल नहीं कर सकते।"
उपरोक्त पाठ सुराग है।
डायलॉग में एक श्रोता होता है जिसे डायलॉग दिखाने के बाद निकाल दिया जाता है । यदि यह निर्धारित नहीं किया गया है तो संवाद नहीं दिखाया जा सकता है।
इसलिए, onCreateDialog()
अपने मोडल बॉटम शीट में ( BottomSheetFragment
), संवाद को वापस करने से पहले (या कहीं भी, एक बार जब आप संवाद का संदर्भ लेते हैं), कॉल करें:
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);
}
});
मेरे मामले में, मेरा रिवाज BottomSheet
निकला:
@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;
}
}
मुझे बताएं क्या इससे मदद मिलती है।
अपडेट करें
ध्यान दें कि आप ओवरराइड भी कर सकते हैं BottomSheetDialogFragment
:
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;
}
}
लेकिन मैं वास्तव में नहीं देखता कि कोई ऐसा क्यों करना चाहेगा क्योंकि आधार BottomSheetFragment
रिटर्न के अलावा कुछ नहीं करता है BottomSheetDialog
।
ANDROIDX के लिए अद्यतन
AndroidX का उपयोग करते समय, पहले पाया गया संसाधन android.support.design.R.id.design_bottom_sheet
अब पाया जा सकता है com.google.android.material.R.id.design_bottom_sheet
।
BottomSheetDialogFragment
दिखाई देने वाले बर्फ़ीले (खुलने वाले एनीमेशन में फ़्रेम को छोड़ता है) बनाता है क्योंकि यह ढहते हुए विस्तारित व्यवहार से जाता है। संपादित करें: Android