#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
элемент в макет, который хочет его использовать, так же, как и для aTextView
или чего-либо еще