【Androidアプリ開発】リストに項目を追加してみる

2021年4月10日

前回は、レイアウトの説明をしました。そしてリストだけ置いてある画面を作成しました。

【Androidアプリ開発】画面レイアウト作成
【Androidアプリ開発】画面レイアウト作成
前回、プロジェクトを作成しました。以下の記事です。 Androidの開発はオブジェクト指向です。オブジェクトに…
http://nomux2.net/post-2098/

今日は、まずリストに項目を追加してみようと思います。

前回までのおさらい

前回は、「app\res\layout」にある「activity_main.xml」を編集し、画面いっぱいのリストを作成しました。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/lvTodoList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

これを実行するとこうなります。

空のリストを表示しているので何も表示されていません。今回はここに試しにいくつか行を作成していきたいと思います。

ListViewに項目を追加する

それではソースを表示して解説していきたいと思います。

今回、編集するファイルは「java」フォルダにある「MainActivity」です。

以下のようにコーディングしました。

package com.example.todomanager

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.ListView
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

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

        //Todoリストを取得する
        val lvTodoList = findViewById<ListView>(R.id.lvTodoList)

        //リスト表示する一覧を作成
        var listTodo = mutableListOf("Todo1", "Todo2", "Todo3")

        //アダプタオブジェクト
        val adapter = ArrayAdapter(applicationContext, android.R.layout.simple_list_item_1, listTodo)

        //リストビューにアダプタオブジェクトを設定
        lvTodoList.adapter = adapter

    }
}

これを実行するとこうなります。

それでは解説していきます。

OnCreateは最初に呼ばれるイベントです。

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

    ・・・

    }

onCreateは、対象のActivityが作成されたときに呼ばれるイベントハンドラです。overrideと記載することで関数を上書きしています。

superは親を指します。つまりもともとのonCreateの処理を実行しています。
setContentViewは「activity_main.xml」を画面に反映させています。

Rはリソース(res)のRで「R.layout.activity_main」はリソース(res)フォルダのlayoutフォルダにあるactivity_mainを指しています。

findViewByIdを使ってListViewを取得する

findViewByIdを使ってまずは画面にあるはずのListViewを取得します。

val lvTodoList = findViewById<ListView>(R.id.lvTodoList)

val は変更しない変数を指します。変更がある場合はvarで宣言します。

lvTodoListは変数名です。適切な名前を付けましょう

findViewByIdは、以下のようになっています。

findViewById<型>(リソース)

これで変数lvTodoListに画面のListViewが格納されました。

mutableListOfでリストを作成

mutableListOfはリストを作成する関数です。mutableとは可変を指します。つまり内容を変更できるということです。ListOfだけでリストを作成すると中身を変更できないということになります。

var listTodo = mutableListOf("Todo1", "Todo2", "Todo3")

varは可変する変数を指します。とりあえずデータ表示テスト用にTodo1~3をセットしてあります。

アダプタオブジェクト

アダプタとは表示するリストデータを管理してリストビューの各行にデータを当てはめていく働きをするオブジェクトです。

val adapter = ArrayAdapter(applicationContext, android.R.layout.simple_list_item_1, listTodo)

ArrayAdapterの第1引数はコンテキストです。これはアプリケーションのコンテキストをセットします。
コンテキストとはAndroidでは抽象クラスのことを指します。

第2引数はレイアウト示すR値をセットします。Android.Rにはリストを1行で表示するシンプルなレイアウトが元々用意されています。

第3引数は、リストデータになります。

リストビューにセット

あとはListViewのadapterプロパティにアダプタオブジェクトをセットすると完了です。

lvTodoList.adapter = adapter

まとめ

今回はリストにデータを入れる方法を説明しました。
これでデータベースに保存されたTodoのリストを取得したときに、画面に表示する方法として使えます。

この処理は、そのままでは使えないので後々変更しなければいけませんが、まずはリストを画面に表示できたという成功を味わっておくとモチベーション維持につながると思います。

Android開発は、初めてなので勉強しながら記事にしていくというのは時間がかかりますね。頑張ります。

ここまで読んで頂いてありがとうございます。