Android 에서 Recyclerview 를 사용 하여 발생 한 문제 기록
6493 단어 Recyclerview
문제 1.Recyclerview 가 너무 빨리 갱신 되 어 프로젝트 가 붕괴 되 었 습 니 다.문 제 는 다음 과 같 습 니 다.
java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{17acc01 position=14 id=-1, oldPos=14, pLpos:-1 scrap [attachedScrap] tmpDetached no parent} at android.support.v7.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition(RecyclerView.java:5046) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5177) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5158) at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2061) at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:562) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1408) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:555) at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170) at android.support.v7.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:3330) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3186) at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1584) at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:323) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:860) at android.view.Choreographer.doCallbacks(Choreographer.java:672) at android.view.Choreographer.doFrame(Choreographer.java:605) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:846) at android.os.Handler.handleCallback(Handler.java:742) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:157) at android.app.ActivityThread.main(ActivityThread.java:5653) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:746) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
이 문 제 를 해결 하기 위해 오랫동안 조사 한 결과 네티즌 들 은 구 글 이라는 컨트롤 자체 의 문제 라 고 말한다.아직 최적화 되 지 않 았 다.해결 방법 은 다음 과 같다.
public class FullyGridLayoutManager extends GridLayoutManager {
private boolean isScrollEnabled = true;
public FullyGridLayoutManager(Context context, int spanCount) {
super(context, spanCount);
}
public FullyGridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout) {
super(context, spanCount, orientation, reverseLayout);
}
// ,
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
try {
super.onLayoutChildren(recycler, state);
} catch (IndexOutOfBoundsException e) {
Log.e("problem", "meet a IOOBE in RecyclerView");
}
}
}
, , 。
질문 2.Recyclerview 목록 이 실시 간 으로 미 끄 러 지 는 문제
해결 방법(친 측,완벽):
scroll_list_head.setHasFixedSize(true);
scroll_list_head.setNestedScrollingEnabled(false);
문제 3.자동 으로 지 정 된 위치 로 미 끄 러 집 니 다.이 문 제 는 여러 가지 해결 방법 이 있 습 니 다.분 부 는 다음 과 같 습 니 다.
해결 방법 1(효과 가 뚜렷 하지 않 은 것 같 지만 효과 가 있 습 니 다.제 프로젝트 의 요구 가 다 를 수도 있 습 니 다.이 방법 은 적합 하지 않 습 니 다)
/**
* RecyclerView ,
*
* @param manager RecyclerView manager
* @param mRecyclerView RecyclerView
* @param n
*/
public static void MoveToPosition_head(LinearLayoutManager manager, RecyclerView mRecyclerView, int n) {
//
int firstItem = manager.findFirstVisibleItemPosition();
//
int lastItem = manager.findLastVisibleItemPosition();
if (n <= firstItem) {
mRecyclerView.smoothScrollToPosition(n);
} else if (n <= lastItem) {
int top = mRecyclerView.getChildAt(n - firstItem).getTop();
mRecyclerView.scrollBy(0, top);
} else {
mRecyclerView.smoothScrollToPosition(n);
}
}
해결 방법 2.(이 방법 은 아주 좋 습 니 다.제 가 필요 로 하 는 문 제 를 잘 해결 합 니 다)
// item
((GridLayoutManager) scroll_list_left.getLayoutManager()).scrollToPositionWithOffset(int position, int offset);
이 글 은 지속 적 으로 업데이트 되 어 발생 한 문 제 를 기록 할 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android 에서 Recyclerview 를 사용 하여 발생 한 문제 기록문제 1.Recyclerview 가 너무 빨리 갱신 되 어 프로젝트 가 붕괴 되 었 습 니 다.문 제 는 다음 과 같 습 니 다. 이 문 제 를 해결 하기 위해 오랫동안 조사 한 결과 네티즌 들 은 구 글 이라는 컨...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.