На 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/>
Другие вопросы по тегам