Android Studio の ListView に CheckBox を追加する | チェックリストを作成

2021年8月6日金曜日

Android Java

t f B! P L

今回の内容

Android Studio の ListViewにCheckBoxを追加して、チェックリストを作成したいと思います。
これができれば結構使えるアプリになると思います。
Android Studio の ListView に CheckBox を追加する | チェックリストを作成

ファイル達


・MyAdapter.java
・MainActivity.java
・MyData.java
・activity_main.xml
・list.xml

主にこのファイルを編集します。

最初にlist.xmlを作成する

ファイルの場所は以下のようにする。
res > layout > list.xml
Android Studio の ListView に CheckBox を追加する | チェックリストを作成
そしたらダイアログが開くので、
Android Studio の ListView に CheckBox を追加する | チェックリストを作成
にする。
そしたら、一度list.xmlのコードを全て消して以下のコードを貼り付ける。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:descendantFocusability="blocksDescendants">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <CheckBox
            android:id="@+id/checkBox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="10dp"
            android:layout_marginBottom="10dp"
            android:scaleX="1.1"
            android:scaleY="1.1" />

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="6dp"
            android:layout_weight="1"
            android:text="TextView"/>
    </LinearLayout>

</LinearLayout>
id checkBoxとid textView を作成しました。

MyAdapter.java

これは独自アダプターのコードになります。ここが結構重要になってきますので、コードをみたらしっかりと理解しておきましょう。
MyAdapter.javaを作成するには、java > your.app.name > MyAdapterになるように作成します。
Android Studio の ListView に CheckBox を追加する | チェックリストを作成
そして、
Android Studio の ListView に CheckBox を追加する | チェックリストを作成
こう入力したら、リターンキーを押して決定します。
そして、一行目の package を除いて、消し、以下のコードを入力しましょう。
import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;

public class MyAdapter extends ArrayAdapter<MyData> {

    private LayoutInflater mLayoutInflater;

    public MyAdapter(Context context, int resourceId, List<MyData> objects) {
        super(context, resourceId, objects);
        // getLayoutInflater()メソッドはActivityじゃないと使えない
        mLayoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    // getView()は各行を表示しようとした時に呼び出される
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // position のデータを取る
        MyData item = (MyData)getItem(position);
        // convertViewは使いまわされている可能性があるのでnullの時だけ新しく作る
        if (null == convertView) convertView = mLayoutInflater.inflate(R.layout.list, null);

        // MyDataのデータをViewの各ウィジェットにセットする
        TextView textView = convertView.findViewById(R.id.textView);
        textView.setText(item.getTextData());
        CheckBox checkBox = convertView.findViewById(R.id.checkBox);
        checkBox.setOnCheckedChangeListener(null);
        checkBox.setChecked(item.isChecked());
        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                MyData MyData = getItem(position);
                MyData.setChecked(b);
            }
        });

        return convertView;
    }
}
このコードはこの時点だとMyDataでエラーが発生しますが、焦らずに、この先の手順を行ってください。

MyData.java

このMyDataにはテキストのデータとチェックのデータが入っています。
MyData.javaファイルを作成する方法は同じ感じでいいです。
package com.test.testapp;

public class MyData {
    private String textData = "";
    private Boolean checkdata = false;
    
    public void setTextdata(String str){
        textData = str;
    }
    public String getTextData(){
        return textData;
    }
    public void setChecked(boolean bool){
        checkdata = bool;
    }
    public boolean isChecked(){
        return checkdata;
    }
}
これを作成したら、MyAdapterのエラーがなくなると思います。なくらなかったら、コメントお願いします。

activity_main.xmlにListViewを設置する

id listViewのリストビューを設置しておいてください。
idがlistViewであればどうでもいいです。


MainActivity.javaを編集する

onCreateに以下のコードを追加してください。
        ListView listView = findViewById(R.id.listView);

        List<MyData> list = new ArrayList<>();

        MyData myData = new MyData();
        myData.setTextdata("あああああ");
        myData.setChecked(true);
        list.add(myData);

        MyData myData2 = new MyData();
        myData2.setTextdata("いいいいい");
        myData2.setChecked(false);
        list.add(myData2);

        MyAdapter adapter = new MyAdapter(MainActivity.this,R.layout.list,list);
        listView.setAdapter(adapter);




参考サイト:
[Android][Java] ListViewのCheckBoxの状態を管理する
【Android開発】チェックボックス付きListViewを作る方法
[Android][Java] ListViewのCheckBoxの状態を管理する

コメント、気軽にどうぞ!

このブログを検索

要望について

ブログのレイアウトやテーマについての提案をいただきました。現在qooqテーマを適応中です。 語尾を自動でつけるプログラムを作りたいという要望をいただきました。是非紹介したいですがどの言語でどのようなプログラムかなど、お問い合わせフォームで詳しく教えてください!

最近の出来事

最近の出来事
寿司打お勧め75位♪(練習モードだけど)

アンケート

Welcome!

「プログラミング独学ブログ」へようこそ。 Yakinyといいます。幅広い範囲で投稿していますので、ぜひ過去の記事も見てみてください!!コメントも大歓迎です!更新がとまってしまって申し訳ございません

お問い合わせ

名前

メール *

メッセージ *

QooQ