【发布时间】: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:<LinearLayout><Cardview>...</Cardview></LinearLayout>
但是,如果我将 LinearLayout 包装在 CardView 中,它将显示所有项目(目前为 2):<Cardview><LinearLayout>...</LinearLayout></Cardview>。
这是为什么?
如果你好奇,这是我的 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