在Android Turbolinks上,如何创建自定义progressView来替换默认微调器?

时间:2017-10-17 20:14:25

标签: android turbolinks turbolinks-5 turbolinks-android

在使用Turbolinks 5的Android上,我没有获得经典的Turbolinks过渡(没有任何插入的白页和顶部的水平进度条)。所以我认为我需要自己的progressView ,但我可能错了

我在 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 个答案:

答案 0 :(得分:3)

我正在检查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);

答案 1 :(得分:1)

here。您的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/>