#android #fragment
#Android #фрагмент
Вопрос:
У меня есть фрагмент, а внутри него у меня есть дочерний фрагмент. Я не могу получить доступ из родительского фрагмента, используя привязку, потому что это выдает ошибку компиляции. Мне понравилось это:
Из родительского фрагмента я сделал:
val fragment = binding.calculatorSheetHome // calculatorSheetHome is fragment id
Но ошибка компиляции гласит,
Cannot access class 'android.widget.fragment'. Check your module classpath for missing or conflicting dependencies
-
Вот код макета родительского фрагмента, и я пытаюсь получить доступ
calculator_sheet_home
<variable name="mLanguage" type="com.hamidjonhamidov.calculator.model.room.LanguageM" />
<androidx.coordinatorlayout.widget.CoordinatorLayout android:id="@ id/coordinator_layout" android:layout_width="match_parent" android:layout_height="match_parent" app:layoutFullscreen="@{true}"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingTop="@dimen/grid_0_25" app:paddingBottomSystemWindowInsets="@{true}" app:paddingTopSystemWindowInsets="@{true}" android:clipToPadding="false"> // ... </androidx.coordinatorlayout.widget.CoordinatorLayout> <fragment android:id="@ id/calculator_sheet_home" android:name="com.hamidjonhamidov.calculator.ui.main.home.calculator_sheet_home.CalculatorSheetFragmentHome" android:layout_width="match_parent" android:layout_height="match_parent" />
Ответ №1:
Фрагмент не является «View», поэтому вы не можете получить к нему доступ, как к традиционному представлению. Но вы можете получить к нему доступ через тег фрагмента, выполнив это следующим образом:
<fragment
android:id="@ id/calculator_sheet_home"
android:name="com.hamidjonhamidov.calculator.ui.main.home.calculator_sheet_home.CalculatorSheetFragmentHome"
android:tag="fragment_sheet_home" // add this line
android:layout_width="match_parent"
android:layout_height="match_parent" />
Теперь из родительского фрагмента вы можете сделать это:
val childFragment = childFragmentManager.findFragmentByTag("fragment_sheet_home") as? CalculatorSheetFragmentHome ?: return
Теперь вы можете использовать свой фрагмент по любой причине)
Ответ №2:
Это решило проблему для меня, обратите внимание, что я использовал нижнюю навигацию и привязку к просмотру
val childFragment = supportFragmentManager.findFragmentByTag("fragment_sheet_home") as? NavHostFragment