На Android Turbolinks, как создать пользовательский progressView для замены спиннера по умолчанию?
На Android, использующем Turbolinks 5, я не получаю классический переход Turbolinks (без промежуточной белой страницы и с горизонтальным индикатором выполнения вверху). Так что я думаю, что мне нужен собственный прогресс, но я могу ошибаться
У меня есть это в моем MainActivity.java
progressView = new ProgressBar(turbolinksView.getContext());
TurbolinksSession.getDefault(this)
.activity(this)
.adapter(this)
.view(turbolinksView)
.progressView(progressView, R.id.indeterminateBar, 300)
.visit(location);
и это в моем activity_main.xml
<ProgressBar
android:id="@+id/indeterminateBar"
android:layout_width="wrap_content"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_height="wrap_content"
/>
настройки Gradle
compileSdkVersion 26
minSdkVersion 19
targetSdkVersion 22
когда я запускаю выше, я получаю IllegalArgumentException "A progress indicator view must be provided in your custom progressView."
поэтому я попробовал
.progressView(progressView, progressView.getId(), 300)
но я все еще получаю IllegalArgumentException "A progress indicator view must be provided in your custom progressView."
Очевидно, я не могу реализовать право progressView
, мой вопрос в том, как мне получить / создать право progressView
??
Заранее извиняюсь за перекрестную публикацию вопроса от Turbolinks-Android, единственная причина, по которой я также разместил его здесь, это то, что я застрял на нем в течение нескольких дней
2 ответа
Я проверял репозиторий Turbolinks-Android и заметил, что возможной причиной этого исключения является то, что ваш объект progressView не имеет R.id.indeterminateBar
как ребенок.
Короче говоря, вы можете попробовать это:
на вашем activity_main.xml:
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ProgressBar
android:id="@+id/indeterminateBar"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="true"/>
</FrameLayout>
на вашем MainActivity.java:
View progressView = (View) findViewById(R.id.frameLayout);
TurbolinksSession.getDefault(this)
.activity(this)
.adapter(this)
.view(turbolinksView)
.progressView(progressView, R.id.indeterminateBar, 300)
.visit(location);
Это здесь. Ваш progressView
должен быть какой-то макет как FrameLayout
и он должен содержать R.id.indeterminateBar
внутри. Так что это будет что-то вроде:
<FrameLayout
android:id="@+id/progressView"
android:width="match_parent"
android:height="match_parent"
android:background="#FFFFFF">
<ProgressBar
android:id="@+id/indeterminateBar"
android:layout_width="wrap_content"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_height="wrap_content" />
<FrameLayout/>