Вы можете решить эту проблему с помощью прослушивателя interface
в вашем фрагменте, который возвращает View
фрагмента *1003* фрагмента обратно в вашу деятельность, чтобы вы могли затем получить доступ к базовым представлениям BottomSheetDialogFragment
обычно с помощью метода findViewById()
.
Здесь я решил использовать шаблон Singleton для BottomSheetDialogFragment
, чтобы установить экземпляр прослушивателя из действия.
Итак, в ваш фрагмент добавьте слушателя; он назван ниже FragmentListener
, вызовите функцию обратного вызова слушателя в onCreateView()
или в onViewCreated()
public class BottomSheetFragment extends BottomSheetDialogFragment {
public BottomSheetFragment() {}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
interface FragmentListener {
void getView(View view);
}
static FragmentListener mFragmentListener;
public static BottomSheetFragment newInstance(FragmentListener listener) {
mFragmentListener = listener;
return new BottomSheetFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Objects.requireNonNull(getDialog()).setOnShowListener(dialog -> {
BottomSheetDialog d = (BottomSheetDialog) dialog;
View bottomSheetInternal =
d.findViewById(com.google.android.material.R.id.design_bottom_sheet);
assert bottomSheetInternal != null;
BottomSheetBehavior.from(bottomSheetInternal).setState(BottomSheetBehavior.STATE_EXPANDED);
});
View view = inflater.inflate(R.layout.layout_popup, container, false);
// Trigger the listener callback to return the view back to the activity
// mFragmentListener.getView(view); // Not working in all devices
return inflater.inflate(R.layout.layout_popup, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
// Trigger the listener callback to return the view back to the activity
mFragmentListener.getView(view);
}
}
реализуйте слушатель по вашей активности, измените текст в вашем обратном вызове и создайте экземпляр BottomSheetDialogFragment
вместо этого используйте шаблон синглтона.
public class MainActivity extends AppCompatActivity implements BottomSheetFragment.FragmentListener {
@Override
protected void onCreate(final Bundle savedInstanceState) {
bottomSheetFragment = BottomSheetFragment.newInstance(this);
}
@Override
public void getView(View view) {
// Setting the text
((MaterialButton) view.findViewById(R.id.btn_titresim)).setText("text");
}
}
Wi sh, который решает вашу проблему