Android 试图在重新创建RecyclerView时设置其滚动状态,但Kotlin说我可以';因为setter是公共的。。。?

Android 试图在重新创建RecyclerView时设置其滚动状态,但Kotlin说我可以';因为setter是公共的。。。?,android,kotlin,android-recyclerview,Android,Kotlin,Android Recyclerview,正如标题所说,我试图在片段的onViewCreated方法中设置回收器视图的滚动状态。我打电话 recycler.scrollState = MainViewModel.sharedViewModel.savedScrollState 我得到了这个错误: the setter is public/*package*/ for synthetic extension in '<dependencies of app_debug>' setter是public/*package*/用

正如标题所说,我试图在片段的onViewCreated方法中设置回收器视图的滚动状态。我打电话

recycler.scrollState = MainViewModel.sharedViewModel.savedScrollState
我得到了这个错误:

the setter is public/*package*/ for synthetic extension in '<dependencies of app_debug>'
setter是public/*package*/用于“”中的合成扩展
为什么我不能使用公共setter?

源代码

void setScrollState(int state) {
    if (state == mScrollState) {
        return;
    }
    if (DEBUG) {
        Log.d(TAG, "setting scroll state to " + state + " from " + mScrollState,
                new Exception());
    }
    mScrollState = state;
    if (state != SCROLL_STATE_SETTLING) {
        stopScrollersInternal();
    }
    dispatchOnScrollStateChanged(state);
}
如您所见,此方法的访问修饰符是default(或package),这意味着只有同一个包中的类才能调用此方法

因为您从具有不同包的代码调用此方法,所以编译器会显示该错误

解决方案:您可以在运行时使用

1.定义为recyclerview设置滚动状态的方法

private fun setScrollState(recyclerView: RecyclerView, state: Int) {
    val method = recyclerView::class.java.getDeclaredMethod("setScrollState", Int::class.java)
    method.isAccessible = true
    method.invoke(recyclerView, state)
}
2.每当您要为recyclerview设置滚动状态时,调用此方法

// recycler.scrollState = MainViewModel.sharedViewModel.savedScrollState
setScrollState(recycler, MainViewModel.sharedViewModel.savedScrollState)

RecyclerView
不公开用于设置scrollstate的方法。scrollstate只有包级别的访问权限。它是为阅读目的而公开的。你的要求是什么?这很好用。不幸的是,滚动状态不是我想的滚动位置。@Xials因为你没有描述你的问题,所以我帮不了你。如果要滚动到recyclerview中的某个位置,请尝试与
scrollToPosition(int-position)
方法协作。