【问题标题】:RecyclerView only shows 1 item when I use LinearLayout instead of CardView as the parent XML layout当我使用 LinearLayout 而不是 CardView 作为父 XML 布局时,RecyclerView 仅显示 1 个项目
【发布时间】:2019-04-15 22:17:21
【问题描述】:

这是我的 XML 片段:

fragment_leaderboards.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:background="@color/colorPrimary">

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/leaderboards_list"
    android:scrollbars="vertical">

</android.support.v7.widget.RecyclerView>

以及我对 ViewHolder 的 LayoutInflater 的自定义视图:

leaderboard_item.xml

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/white"
        android:baselineAligned="false"
        android:orientation="horizontal"
        android:padding="5dp">

    <TextView
        android:id="@+id/leaderboard_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:layout_weight="1"
        android:text="Title"
        android:textColor="#000000"
        android:textSize="18sp"
        android:textStyle="bold" />

    <ImageView
        android:id="@+id/imgShare"
        android:layout_width="30dp"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:src="@android:drawable/ic_menu_share"
        android:tint="#eeeeee"/>
    </LinearLayout>

上面的 XML 将只显示我的 RecyclerView 的 1 项。如果我将 CardView 放在 LinearLayout 中,它也只会显示一项 RecyclerView:&lt;LinearLayout&gt;&lt;Cardview&gt;...&lt;/Cardview&gt;&lt;/LinearLayout&gt;

但是,如果我将 LinearLayout 包装在 CardView 中,它将显示所有项目(目前为 2):&lt;Cardview&gt;&lt;LinearLayout&gt;...&lt;/LinearLayout&gt;&lt;/Cardview&gt;

这是为什么?

如果你好奇,这是我的 Kotlin 代码:

片段

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.fragment_leaderboards, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val viewManager: RecyclerView.LayoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
        val viewAdapter: RecyclerView.Adapter<*> = LeaderboardsAdapter(arrayListOf(Player("James", 23, "male"), Player("Jane", 22, "female")))
        val recyclerView: RecyclerView = leaderboards_list.apply {
            adapter = viewAdapter
            layoutManager = viewManager
            setHasFixedSize(true)
        }
    }

LeaderboardsAdapter.kt

class LeaderboardsAdapter(private val players: ArrayList<Player>) : RecyclerView.Adapter<LeaderboardsAdapter.ViewHolder>(){

    class ViewHolder(val v: View) : RecyclerView.ViewHolder(v)

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LeaderboardsAdapter.ViewHolder {
        Log.d("Viewgroup", "$parent.toString() $parent.")
        val view = LayoutInflater.from(parent.context).inflate(R.layout.leaderboard_item, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: LeaderboardsAdapter.ViewHolder, position: Int) {
        holder.v.leaderboard_name.text = players[position].name
    }

    override fun getItemCount(): Int = players.size

}

【问题讨论】:

    标签: android xml kotlin android-recyclerview


    【解决方案1】:

    我的 LinearLayout 有 android:layout_height="match_parent",所以 1 项占据了整个屏幕 - 这就是问题所在。

    【讨论】:

      【解决方案2】:

      没错,您可以设置android:layout_height="wrap_content" 或根据您的视图要求固定高度。看到这在 android 开发人员中很常见。祝下次好运。

      【讨论】:

        猜你喜欢
        • 2017-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-18
        相关资源
        最近更新 更多