Не удается получить доступ к классу ‘android.widget.fragment’. Проверьте свой путь к классу модуля на наличие отсутствующих или конфликтующих зависимостей

#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
  
  1. Вот код макета родительского фрагмента, и я пытаюсь получить доступ 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