今日の失敗:RecycleView

Android Studio

久々にAndroidアプリを作ろうとすると、色々ボケたことをしています。今日はRecycleViewでやらかしました。

まずはAdapterを作って

package com.gmail.san58gong.myrecycleview01

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView

class CustomAdapter(private val prefList: ArrayList<String>): RecyclerView.Adapter<CustomAdapter.ViewHolder>() {
    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val text1: TextView

        init {
            text1 = view.findViewById(R.id.textView)
        }

    }

    override fun getItemCount(): Int = prefList.size

    override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
        val itemView = LayoutInflater.from(viewGroup.context).inflate(R.layout.list_layout, viewGroup, false)
        return  ViewHolder(itemView)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {

        holder.text1.text = prefList[position]
    }

}

表示用のlayoutを作って

<?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">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="TextView" />
</LinearLayout>

Activityに設定して

package com.gmail.san58gong.myrecycleview01

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView

class MainActivity : AppCompatActivity() {

    lateinit var mAdapter: CustomAdapter
    lateinit var listArray: ArrayList<String>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // RecyclerViewの取得
        val recyclerView = findViewById<RecyclerView>(R.id.recycler_view)


        // LayoutManagerの設定
        recyclerView.layoutManager = LinearLayoutManager(this)

        listArray = arrayListOf("大阪", "京都", "兵庫", "奈良", "滋賀", "和歌山")
        // CustomAdapterの生成と設定
        recyclerView.adapter = CustomAdapter(listArray)

    }
}

実行すると

一つしか表示しない。

久々で色んなことを忘れているので自信がなく、何か忘れていないかとか、文字の打ち間違いがないかなどさんざん探し、ネット上の参考資料や、過去の自分で作ったのをみても何が悪いかわからず2時間くらい、ああでもない、こうでもないとやりました。

その後、fragmentの時に似た様なことがあったと気がつきました。1画面に複数のfragmentを表示しようとするときはLayout_heightをwrap_content1にしないといけなかったことを。

Fragment を使ってみる(その4)やりたいことの整理

そうなんです。一つしか表示していないんじゃなくて、一つ一つが全画面になっていただけだったんです。スワイプすれば二つ目、三つ目も見えたんです。layoutファイルのベースになっているLinearLayout のlayout_heightを”wrap_content”に変更して解決しました。

<?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">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="TextView" />
</LinearLayout>

コメント

タイトルとURLをコピーしました