android.view.Исключение InflateException: строка двоичного файла XML # 23: строка двоичного файла XML # 38:

#android #kotlin

#Android #kotlin

Вопрос:

Пользовательский класс ::

 class TimerView @JvmOverloads constructor(
        context: Context,
        attrs: AttributeSet? = null,
        defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
    var totalDays: Int = 0
    var daysLeft: Int = 0

    
    init {
        inflate(context, R.layout.view_timer_progress_bar,this)
        circularProgressbar.progress = 28

    }
 

}

view_timer_progress_bar

     <TimerView
 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/progressbar_timer_view"
        android:layout_width="@dimen/dp_64"
        android:layout_height="@dimen/dp_64"
        android:layout_gravity="center_horizontal"
        >
    
        <ProgressBar
            android:id="@ id/circularProgressbar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="@dimen/dp_142"
            android:layout_height="@dimen/dp_142"
            android:layout_centerInParent="true"
            android:indeterminate="false"
            android:progressDrawable="@drawable/timer_circular"
            app:layout_constraintBottom_toBottomOf="@ id/progressbar_timer_view"
            app:layout_constraintEnd_toEndOf="@ id/progressbar_timer_view"
            app:layout_constraintStart_toStartOf="@ id/progressbar_timer_view"
            app:layout_constraintTop_toTopOf="@ id/progressbar_timer_view"
            tools:max="100"
            tools:progress="50"
            tools:secondaryProgress="100" />
    
        <TextView
            android:id="@ id/tv_time_days"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:textSize="@dimen/sp_14"
            android:lineSpacingExtra="0sp"
            android:gravity="center_horizontal"
            tools:text="28ndays"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
             />
    
    </TimerView>
 

Я пытаюсь включить это пользовательское представление TimerView в другой макет, как показано ниже

 <RelativeLayout
        android:id="@ id/frame_timer_container"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        tools:ignore="MissingConstraints">
        <include layout="@layout/widget_timer_progress_bar" />
    </RelativeLayout>
 

В представлении класса я инициализирую следующим образом

 private lateinit var timerView: TimerView

    private lateinit var timerView: TimerView
    onCreateView(){
     timerView = contentView.findViewById(R.id.progressbar_timer_view)
    }
 

Я получаю исключение выше двоичного раздувания. Я хочу создать пользовательский вид, чтобы я мог использовать любое место, как с динамическим значением, с другим представлением, которое я могу использовать повторно, пожалуйста, предложите и помогите мне, что я делаю неправильно

 Stack trace:: <P>paste.ofcode.org/34qQkj2dFnEMBpak8HdRTja</p>
 

Комментарии:

1. Пожалуйста, также опубликуйте трассировку стека. В любом случае, похоже, что у вас бесконечная рекурсия с внутренним макетом пользовательского представления, содержащим само пользовательское представление.

2. Процесс: com.myapp.mobile.titan.prodtest.debug, PID: 23774 android.view. Исключение InflateException: строка двоичного файла XML # 23: строка двоичного файла XML # 38: ошибка раздувания класса, вызванная: android.view. Исключение InflateException: строка двоичного файла XML # 38: ошибка при раздувании виджета класса. Просмотр времени, вызванный: java.lang.reflect. Исключение InvocationTargetException

3. Я не могу добавить ссылку здесь, поэтому я не могу опубликовать полную

4. вам необходимо отредактировать свой пост, чтобы включить трассировку стека

5. как говорит @laalto, у вас проблема с рекурсией — ваш TimerView пользовательский вид раздувает макет, который содержит другой TimerView . Вам нужен макет с тем, что внутри TimerView , тогда вы можете просто добавить TimerView элемент в макет, который хочет его использовать, так же, как и для a TextView или чего-либо еще