「まずはやってみよう!」
時間を大切にして、のびのびと健康に生きるための情報発信ブログ

【RecyclerView】リストの要素がひとつしか表示されない原因

やりたいこと

RecyclerViewのリストの要素がひとつしか表示されない問題を修正したい。

AAAAAという文字列だけでなく、BBBBB、CCCCC、DDDDD、EEEEEという文字列も渡しているのですが・・・。

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

private fun initMenuAdapter() {
    mainMenuList.layoutManager = LinearLayoutManager(activity)
    mainMenuList.adapter = MainMenuAdapter(createMainMenuTitles())
}

private fun createMainMenuTitles() = listOf("AAAAA", "BBBBB", "CCCCC", "DDDDD", "EEEEE")

 

スポンサーリンク

対策

ViewHolderのViewを生成する際のレイアウトのlayout_heightmatch_parentになっている可能性があります。
これをwrap_contentに変えてみましょう。

参考 Recycler view showing single itemStack Overflow

結果

リストが表示されるようになりました!

スポンサーリンク

ソースコード

MainFragment.kt

package katapiproject.practice

import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v7.widget.LinearLayoutManager
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import katapiproject.practice.adapter.MainMenuAdapter
import kotlinx.android.synthetic.main.fragment_main.*

class MainFragment : Fragment() {

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

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

    private fun initMenuAdapter() {
        mainMenuList.layoutManager = LinearLayoutManager(activity)
        mainMenuList.adapter = MainMenuAdapter(createMainMenuTitles())
    }

    private fun createMainMenuTitles() = listOf("AAAAA", "BBBBB", "CCCCC", "DDDDD", "EEEEE")

    companion object {
        fun newInstance() = MainFragment()
    }
}

 

fragment_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/mainMenuList"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </ScrollView>

</LinearLayout>

 

MainMenuAdapter.kt

package katapiproject.practice.adapter

import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import katapiproject.practice.R
import katapiproject.practice.viewholder.MainMenuViewHolder

class MainMenuAdapter(private val titles : List<String>) : RecyclerView.Adapter<MainMenuViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MainMenuViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.signle_list_item, parent, false)
        return MainMenuViewHolder(titles, view)
    }

    override fun getItemCount() = titles.size

    override fun onBindViewHolder(holder: MainMenuViewHolder, position: Int) {
        holder.bind(position)
    }

}

single_list.item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:paddingBottom="16dp"
    android:paddingEnd="12dp"
    android:paddingStart="12dp"
    android:paddingTop="16dp">

    <TextView
        android:id="@+id/listTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="16dp" />

</LinearLayout>

 

MainMenuViewHolder.kt

package katapiproject.practice.viewholder

import android.support.v7.widget.RecyclerView
import android.view.View
import kotlinx.android.synthetic.main.signle_list_item.view.*

class MainMenuViewHolder(private val titles: List<String>, itemView: View) : RecyclerView.ViewHolder(itemView) {
    fun bind(position: Int) {
        itemView.listTitle.text = titles[position]
    }
}

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA