scrollview在移动设备中不起作用,但在模拟中起作用

时间:2019-12-31 06:42:53

标签: android kotlin scrollview

我使用了RecyclerView,它通过LayoutManager调整为水平形状, 我将RecyclerView放在Horizo​​ntalScrollView中,效果很好,在真实电话中的Android Studio的android模拟中,它有时可以工作!我的意思是它会稍微滚动而无法完全滚动,但是如果您尝试滚动太多,它可能会完全滚动。

这是我的回收者视图代码:

    <HorizontalScrollView
        android:id="@+id/scrollbar"
        android:layout_width="wrap_content"
        android:layout_height="match_parent">


           <androidx.recyclerview.widget.RecyclerView
               android:id="@+id/recycler_challenge"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content" />


    </HorizontalScrollView>

这些代码显示了我如何在Fragment中使用RecyclerView:

    val recyclerView = view.findViewById<RecyclerView>(R.id.recycler_challenge)

    recyclerView.layoutManager = LinearLayoutManager(view.context, LinearLayoutManager.HORIZONTAL, false)


    val challenges = ArrayList<challenge_model>()

    challenges.add(challenge_model("https://pic1.jpg", "picture one", false,"pic_1"))
    challenges.add(challenge_model("https://pic1.jpg", "picture two", false,"pic_2"))
    challenges.add(challenge_model("https://pic1.jpg", "picture two", false,"pic_3"))
    challenges.add(challenge_model("https://pic1.jpg", "picture two", false,"pic_4"))
    challenges.add(challenge_model("https://pic1.jpg", "picture two", false,"pic_5"))


    val adapter = challenge_adapter(challenges)
    recyclerView.adapter = adapter
    adapter.notifyDataSetChanged()

基于上面的代码,大约无法完全滚动,我的意思是我可以滚动并看到三张图片,看来就是这样!但有时它可以完全滚动并显示所有5张图像。

2 个答案:

答案 0 :(得分:1)

尝试使用唯一的recyclerview,从父级删除Horizo​​ntalScrollView。对于Horizo​​ntalScroll,您可以使用以下代码。

recycler_challenge.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));


<androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_challenge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager" />

答案 1 :(得分:-1)

首次设置适配器时,不需要notifyDataSetChanged(), 因此,尝试删除

adapter.notifyDataSetChanged()

您以后在班上任何地方的列表项发生变化时都应使用它。