Android Studio リストビュー ListView 追加と削除

2021年7月26日月曜日

Android Java

t f B! P L

今回の内容

今回はAndroid StudioのListViewの追加と削除などを紹介していきます。
設置まで丁寧に説明したいと思います。今度、ListViewを活用した最強術を紹介したいと思いますが、今日の記事では紹介しません。
それではごゆっくり。

レイアウトはこうしました。

ボタン3つとListView
(activity_main.xml)
Android Studio リストビュー ListView 追加と削除
コードはこんな感じです。
<?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/listView"
        android:layout_width="376dp"
        android:layout_height="461dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.47"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.084" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="取得"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/button2"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.832" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="追加"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/button3"
        app:layout_constraintStart_toEndOf="@+id/button"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.832" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="全て削除"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/button2"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.832" />

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java

こんな感じです。
※package ○○.○○.○○ を省略しています。
import androidx.appcompat.app.AppCompatActivity;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    private ArrayList<String> array;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView listView = findViewById(R.id.listView);
        array = new ArrayList<>();
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //取得 ボタンのクリックイベント
                getListItems();
            }
        });
        findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //追加ボタンのクリックイベント
                addItem();
            }
        });
        findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //全て削除ボタンのクリックイベント
                listView.setAdapter(null);
                array.clear();
            }
        });
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                //アイテムがクリックされたときのイベント。
                //変数 i がクリックされたアイテムの位置
                //タップされたアイテムを削除します。
                array.remove(i);
                ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1,array);
                listView.setAdapter(arrayAdapter);
            }
        });
    }
    private void getListItems(){
        String text = "";
        ListView listView = findViewById(R.id.listView);
        for (int i = 0;i < listView.getCount();i++){
            text += array.get(i) + "\n";
        }
        new AlertDialog.Builder(MainActivity.this)
                .setMessage(text)
                .show();
    }

    private void addItem(){
        ListView listView = findViewById(R.id.listView);
        final EditText editText = new EditText(MainActivity.this);
        new AlertDialog.Builder(MainActivity.this)
                .setTitle("追加")
                .setMessage("追加したいアイテムの名前を入力してください。")
                .setView(editText)
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        array.add(editText.getText().toString());
                        ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1,array);
                        listView.setAdapter((adapter));
                    }
                })
                .show();
    }
}
Android Studio リストビュー ListView 追加と削除

解説

レイアウトの方は自分で考えてください...
っで、問題はMainActivity.javaの方ですよ。
ではまず、ここの行をみてください。
private ArrayList<String> array;
arrayという変数を作成しています。MainActivity.java内なら、いつでもこの変数の読み取りと変更ができます。
これをこれから使っていきます。

そして、次には取得ボタンのイベントをみていきます。getListItemsという関数が呼び出されていますね。
    private void getListItems(){
        String text = "";
        ListView listView = findViewById(R.id.listView);
        for (int i = 0;i < listView.getCount();i++){
            text += array.get(i) + "\n";
        }
        new AlertDialog.Builder(MainActivity.this)
                .setMessage(text)
                .show();
    }
text += array.get(i) + "\n" としています。
これはtextという文字列の変数にどんどん付け足すということをしています。
arrayは最初に紹介した配列です。
それのget(i)はその配列のi個目の項目を取得するということです。
それをどんどんtext変数に付け足しています。 その後、AlertDialogでtext変数の内容を表示させます。

次に、追加ボタンのイベントをみていきます。
これは、addItem関数が呼び出されていますね。
    private void addItem(){
        ListView listView = findViewById(R.id.listView);
        final EditText editText = new EditText(MainActivity.this);
        new AlertDialog.Builder(MainActivity.this)
                .setTitle("追加")
                .setMessage("追加したいアイテムの名前を入力してください。")
                .setView(editText)
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        array.add(editText.getText().toString());
                        ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1,array);
                        listView.setAdapter((adapter));
                    }
                })
                .show();
    }
このコードでやっていることとして、まず最初にアラートダイアログを表示させています。
EditText入りのダイアログなので、最初にeditTextというのを作成します。それをAlertDialog.BuilderのsetViewで設置します。
んで、そこから追加するためのコードですが、「array.add(editText.getText().toString)」とあります。
editText.getText().toStringではEditTextに入力された内容を取得しています。
それをarrayに追加しています。それでけではListViewに反映されせん。ArrayAdapterを利用してListViewにsetさせなければなりません。
まず、ArrayAdapterを作成します。
ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1,array);
第三引数にarrayを指定しています。このアダプターをListViewにsetAdapterすればいいのです。

次に全て削除ボタンのイベントをみていきましょう。
        findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //全て削除ボタンのクリックイベント
                listView.setAdapter(null);
                array.clear();
            }
        });
listView.setAdapter(null)としていますが、本来ならば、setAdapterにはArrayAdapterを指定する必要があります。しかし、nullにすることで、空にできます。
それだけでは変数arrayに反映されていないため、array.clear()でarrayも空にしています。

次にリスト項目をタップされた後、削除するときのコードをみていきましょう。
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                //アイテムがクリックされたときのイベント。
                //変数 i がクリックされたアイテムの位置
                //タップされたアイテムを削除します。
                array.remove(i);
                ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1,array);
                listView.setAdapter(arrayAdapter);
            }
        });
このときの変数iはタップされた項目の番号(位置)です。
array.remove(i)としていますが、array.removeで指定した場所の項目を削除します。
それだけでは、ListViewに反映されないので、ArrayAdapterをつくって、setAdapterしています。



疲れたのでここまでにします
コメント、大歓迎です!

このブログを検索

要望について

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

最近の出来事

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

アンケート

Welcome!

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

お問い合わせ

名前

メール *

メッセージ *

QooQ