gpt4 book ai didi

发生 java.lang.IllegalArgumentException

转载 作者:行者123 更新时间:2023-11-29 18:27:52 30 4
gpt4 key购买 nike

我编写了一个处理程序来维护 recyclerview 的自动滚动。它工作正常。但是当 recyclerview 中只有一个项目时,我遇到了这个问题。我的应用程序崩溃了,当我检查 logcat 时,我收到类似 java.lang.IllegalArgumentException: Invalid target position 的错误。

这是我的自定义 LinearLayoutManager 类

public class CustomLinearLayoutManager extends LinearLayoutManager {

public CustomLinearLayoutManager (Context context) {
super(context);
}

public CustomLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
}

public CustomLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}

@Override
public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
final LinearSmoothScroller linearSmoothScroller =
new LinearSmoothScroller(recyclerView.getContext()) {
private static final float MILLISECONDS_PER_INCH = 100f;

@Override
public PointF computeScrollVectorForPosition(int targetPosition) {
return CustomLinearLayoutManager.this
.computeScrollVectorForPosition(targetPosition);
}

@Override
protected float calculateSpeedPerPixel
(DisplayMetrics displayMetrics) {
return MILLISECONDS_PER_INCH / displayMetrics.densityDpi;
}
};
linearSmoothScroller.setTargetPosition(position);
startSmoothScroll(linearSmoothScroller);
}
}

这是这一行的错误:

startSmoothScroll(linearSmoothScroller);

错误是 - CustomLinearLayoutManager.smoothScrollToPositionjava.lang.IllegalArgumentException: 无效的目标位置

这是主页 fragment 的代码

 recyclerViewHeaderSlider.setLayoutManager(new CustomLinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false));
headerSliderAdapter.setOnClick(this);
recyclerViewHeaderSlider.setAdapter(headerSliderAdapter);
final int speedScroll = 6000;
final Handler handler = new Handler();
final Runnable runnable = new Runnable() {
int count = 0;
boolean flag = true;

@Override
public void run() {
if (count < headerSliderAdapter.getItemCount()) {
if (count == headerSliderAdapter.getItemCount() - 1) {
flag = false;
} else if (count == 0) {
flag = true;
}
if (flag) count++;
else count--;

recyclerViewHeaderSlider.smoothScrollToPosition(count);
handler.postDelayed(this, speedScroll);
}
}
};

handler.postDelayed(runnable, speedScroll);

这是这一行的错误:

recyclerViewHeaderSlider.smoothScrollToPosition(count);

错误是 - java.lang.IllegalArgumentException: 无效的目标位置

最佳答案

错误是由于负索引 (-1)。

看这段代码:

if (count == headerSliderAdapter.getItemCount() - 1) {
flag = false;
} else if (count == 0) {
flag = true;
}

如果您的项目计数为 1,则当 count == 0 时,第一个 if 将为 true。1 - 1 = 0 所以 flag = false

然后,当你到达第二个if时:

if (flag) count++;
else count--;

flagfalse 因此您的代码将执行 count--count 已经为 0,因此您获取 count == -1

然后你尝试滚动到负数位置,这是不允许的。

关于发生 java.lang.IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57937265/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com