RecyclerView#onMeasure()没有通过调用setMeasuredDimension()来设置测量的维度

时间:2017-07-18 17:34:30

标签: android android-recyclerview fragment dimension onmeasure

我有一个带有Recyclerview的片段,附有LinearSnapHelper,以便在中心获取视图,并通过缩放其大小来突出显示。

它工作正常,但是当从背板上弹出这个片段时,它会抛出异常。

private places: any;

var onKeyEnteredRegistration = geoQuery.on("key_entered", function(key, location, distance) {
  this.places.push({ key, location, distance });
});

var onKeyExitedRegistration = geoQuery.on("key_exited", function(key, location, distance) {
  this.places = this.places.filter(place => place.key !== key);
});

updatePlacesDistance(currentLocation) {
  this.places.map(place => {
    place.distance = GeoFire.distance(currentLocation, place.location);
  });
}

recyclerview的相关代码为

https://gist.githubusercontent.com/anonymous/81a2ae091ded158839b6353ddb03163f/raw/1aff18064d4de4e42b79aa50ff8d44bd6df365a9/Main.java

4 个答案:

答案 0 :(得分:4)

我认为这是因为我们使用已RecyclerView.setLayoutManager()的{​​{1}}来调用LayoutManager

RecyclerView

但是由于我不明白的原因,Logcat中打印的例外是

public void setLayoutManager(LayoutManager layout) {
    ...
    if (layout != null) {
        if (layout.mRecyclerView != null) {
            throw new IllegalArgumentException("LayoutManager " + layout
                    + " is already attached to a RecyclerView:"
                    + layout.mRecyclerView.exceptionLabel());
        }
        mLayout.setRecyclerView(this);
        if (mIsAttached) {
            mLayout.dispatchAttachedToWindow(this);
        }
    }
    ...
}

也许有什么东西会抓住这个异常而抛出这个异常(没有原因)?

答案 1 :(得分:0)

我通过简单地致电mRecyclerView.setLayoutManager(new LinearLayoutManager(this));来解决了这一问题,并且该方法可以发挥作用,希望对您有所帮助。

答案 2 :(得分:0)

好的,我只是按照@Kevin Robatel提到的那样进行了修复。 就我而言,我仅在onCreate()中初始化布局管理器一次,然后在onViewCreated()或onResume()中使用它(即,在多个位置)。

因此,解决方法是“ 每次需要设置布局管理器时都要重新初始化布局管理器”。

这对我来说也是一个教训,欢呼!

答案 3 :(得分:0)

就我而言,我有 1 个以上的回收器视图,但我只创建了一次线性布局管理器。

我为每个回收器视图创建了线性布局管理器并且它工作正常。

谢谢。