我和你遇到了相同的情况,显示没问题,但是出现了定位错误。
这是我的解决方案:
(1)在ON CREATE()中初始化RecyclerView并绑定适配器。
这是我的解决方案:
(1)在ON CREATE()中初始化RecyclerView并绑定适配器。
RecyclerView mRecycler = (RecyclerView) this.findViewById(R.id.yourid)
mRecycler.setAdapter(adapter)
(2)当你获取数据时,调用notifyDataStateChanged
adapter.notifyDataStateChanged()
在recyclerView的源代码中,有其他线程来检查数据的状态。
public RecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.mObserver = new RecyclerView.RecyclerViewDataObserver(null);
this.mRecycler = new RecyclerView.Recycler();
this.mUpdateChildViewsRunnable = new Runnable() {
public void run() {
if(RecyclerView.this.mFirstLayoutComplete) {
if(RecyclerView.this.mDataSetHasChangedAfterLayout) {
TraceCompat.beginSection("RV FullInvalidate");
RecyclerView.this.dispatchLayout();
TraceCompat.endSection();
} else if(RecyclerView.this.mAdapterHelper.hasPendingUpdates()) {
TraceCompat.beginSection("RV PartialInvalidate");
RecyclerView.this.eatRequestLayout();
RecyclerView.this.mAdapterHelper.preProcess();
if(!RecyclerView.this.mLayoutRequestEaten) {
RecyclerView.this.rebindUpdatedViewHolders();
}
RecyclerView.this.resumeRequestLayout(true);
TraceCompat.endSection();
}
}
}
};
在dispatchLayout()函数中,我们发现它存在错误:
void dispatchLayout() {
if(this.mAdapter == null) {
Log.e("RecyclerView", "No adapter attached; skipping layout");
} else if(this.mLayout == null) {
Log.e("RecyclerView", "No layout manager attached; skipping layout");
} else {