У меня есть DatePicker в BottomSheetDialogFragment, и когда я нажимаю на «год», чтобы отобразить список года, список не прокручивается, и я не могу прокручивать назад или вперед. Событие прокрутки улавливается bottomSheet, и прокрутка вниз закроет фрагмент. Любая идея, как я могу позволить datePicker получить событие прокрутки? Thx
введите здесь описание изображения
Макет *. xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/bottomSheetContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/line2"
android:layout_width="24dp"
android:layout_height="3dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="17dp"
android:background="@drawable/slider_black_background"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/perl_ic"
app:layout_constraintStart_toStartOf="@+id/perl_ic"
app:layout_constraintTop_toTopOf="parent" />
<androidx.core.widget.NestedScrollView
android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="35dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/baseline_grid_3x">
<LinearLayout
android:id="@+id/from_to_selector"
android:layout_width="wrap_content"
android:layout_height="38dp"
android:layout_marginStart="@dimen/baseline_grid_2x"
android:layout_marginTop="@dimen/baseline_grid_2x"
android:layout_marginEnd="@dimen/baseline_grid_2x"
android:background="@drawable/background_filter_btn_container"
android:baselineAligned="false"
android:orientation="horizontal"
android:padding="@dimen/baseline_grid_0.5x"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/line">
<RelativeLayout
android:id="@+id/depart_selection"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="117dp"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/baseline_grid_2x"
android:layout_weight="1"
android:background="@drawable/background_filter_btn"
android:minHeight="0dp">
<TextView
android:id="@+id/depart_selection_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_small"
android:textAllCaps="false"
style="@style/TextAppearance.Button"
android:textColor="@color/filter_button_text_selector"
android:textSize="13sp"
tools:text="Ab" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/arrive_selection"
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="117dp"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:background="@drawable/background_filter_btn"
android:minHeight="0dp">
<TextView
android:id="@+id/arrive_selection_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_small"
android:textAllCaps="false"
style="@style/TextAppearance.Button"
android:textColor="@color/filter_button_text_selector"
android:textSize="13sp"
tools:text="An" />
</RelativeLayout>
</LinearLayout>
<DatePicker
android:id="@+id/date_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/baseline_grid_2.5x"
android:theme="@style/datepicker"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/from_to_selector" />
<Button
android:id="@+id/finish_btn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/baseline_grid_2x"
android:layout_marginTop="@dimen/baseline_grid_1.5x"
android:layout_marginEnd="@dimen/baseline_grid_2x"
android:background="@color/colorPrimary"
android:textColor="@color/cobalt_blue"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/date_picker"
tools:text="Fertig" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</FrameLayout>
Фрагмент:
class CalendarBottomSheetFragment : RoundedBottomSheetDialogFragment() {
private val strings: Strings
get() = Strings(requireContext())
companion object {
val TAG: String = CalendarBottomSheetFragment::class.java.simpleName
const val BIRTHDAY_RESULT_CODE = 2734
const val BIRTHDAY_RESULT_KEY = "BIRTHDAY_RESULT_KEY"
fun newInstance(selectedDate: Date): CalendarBottomSheetFragment {
val args = Bundle()
args.putSerializable(BIRTHDAY_RESULT_KEY, selectedDate)
val fragment = CalendarBottomSheetFragment()
fragment.arguments = args
return fragment
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.calendar_bottom_sheet, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
from_to_selector.visibility = View.GONE
finish_btn.text = strings.doneButtonText
finish_btn.setOnClickListener(getFinishClickListener())
date_picker.setOnTouchListener { view, motionEvent ->
if (motionEvent.getActionMasked() == MotionEvent.ACTION_DOWN) {
val p = view.parent
if (p != null)
p.requestDisallowInterceptTouchEvent(true);
}
false
}
dialog?.setOnShowListener {
val dialog = it as BottomSheetDialog
val bottomSheet = dialog.findViewById<View>(R.id.design_bottom_sheet) as FrameLayout?
val bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet!!)
bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
bottomSheetBehavior.skipCollapsed = true
}
updateDatePickerWithPassedDate()
}
private fun updateDatePickerWithPassedDate() {
val date = arguments?.getSerializable(BIRTHDAY_RESULT_KEY)
// Choose time zone in which you want to interpret your Date
val cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Paris"))
cal.time = date as Date?
val year = cal.get(Calendar.YEAR)
val month = cal.get(Calendar.MONTH)
val day = cal.get(Calendar.DAY_OF_MONTH)
date_picker.updateDate(year, month, day)
}
private fun getFinishClickListener(): View.OnClickListener {
return View.OnClickListener {
val intent = Intent()
intent.putExtra(BIRTHDAY_RESULT_KEY, date_picker.getDate)
val fragment = activity?.supportFragmentManager?.findFragmentByTag(CoTravelerFormFragment.TAG)
fragment?.onActivityResult(CoTravelerFormFragment.BIRTHDAY_REQUEST_CODE, BIRTHDAY_RESULT_CODE, intent)
dismiss()
}
}
private class Strings(context: Context) {
val doneButtonText: String = context.getString(DialectUtils.getStringVariant(
R.string.global_done,
R.string.dialect_global_done
))
}
}