我有一个带有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的相关代码为
答案 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 个以上的回收器视图,但我只创建了一次线性布局管理器。
我为每个回收器视图创建了线性布局管理器并且它工作正常。
谢谢。