Android
 Computer >> コンピューター >  >> プログラミング >> Android

AndroidのListViewでVectorクラスを使用する方法【初心者向け解説】

AndroidのListViewでVectorクラスを活用する方法

この記事では、AndroidアプリのListView(リストビュー)において、JavaのVectorクラスを使用してデータを管理・表示する方法を、実際のコード例とともに段階的に解説します。ユーザーが入力した名前をVectorに保存し、「保存」ボタンでリストに追加、「更新」ボタンでListViewを再描画するというシンプルなサンプルアプリを作成します。

手順1:新規プロジェクトを作成する

まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成してください。

手順2:レイアウトファイル(activity_main.xml)を編集する

次に、res/layout/activity_main.xmlに以下のコードを追加します。

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android"
   xmlns:tools = "https://schemas.android.com/tools"
   android:layout_width = "match_parent"
   android:layout_height = "match_parent"
   tools:context = ".MainActivity"
   android:orientation = "vertical">
   <EditText
      android:id = "@+id/name"
      android:layout_width = "match_parent"
      android:hint = "Enter Name"
      android:layout_height = "wrap_content" />
   <LinearLayout
      android:layout_width = "wrap_content"
      android:layout_height = "wrap_content">
      <Button
         android:id = "@+id/save"
         android:text = "Save"
         android:layout_width = "wrap_content"
         android:layout_height = "wrap_content" />
      <Button
         android:id = "@+id/refresh"
         android:text = "Refresh"
         android:layout_width = "wrap_content"
         android:layout_height = "wrap_content" />
   </LinearLayout>
   <ListView
      android:id = "@+id/listView"
      android:layout_width = "match_parent"
      android:layout_height = "wrap_content">
   </ListView>
</LinearLayout>

このレイアウトでは、名前を入力するためのEditText、データを登録する「Save」ボタンとリストを更新する「Refresh」ボタン、そして入力内容を一覧表示するListViewを垂直方向(vertical)のLinearLayout内に配置しています。

手順3:MainActivity.javaを実装する

続いて、src/MainActivity.javaに以下のコードを記述します。

package com.example.andy.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.Vector;
public class MainActivity extends AppCompatActivity {
   EditText name;
   ArrayAdapter vectorAdapter;
   Vector<String> vector_list;
   private ListView listView;
   @Override
   protected void onCreate(Bundle readdInstanceState) {
      super.onCreate(readdInstanceState);
      setContentView(R.layout.activity_main);
      vector_list = new Vector<String>();
      name = findViewById(R.id.name);
      listView = findViewById(R.id.listView);
      findViewById(R.id.refresh).setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            vectorAdapter.notifyDataSetChanged();
            listView.invalidateViews();
            listView.refreshDrawableState();
         }
      });
      findViewById(R.id.save).setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            if (!name.getText().toString().isEmpty()) {
               vector_list.add(name.getText().toString());
               vectorAdapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, vector_list);
               listView.setAdapter(vectorAdapter);
               Toast.makeText(MainActivity.this, "Inserted", Toast.LENGTH_LONG).show();
            } else {
               name.setError("Enter NAME");
            }
         }
      });
   }
}

コードのポイント解説

  • Vectorインスタンスの生成new Vector<String>()で文字列を格納するVectorオブジェクトを作成します。VectorはArrayListと同様に動的な配列として機能し、スレッドセーフである点が特徴です。
  • 保存ボタンの処理:EditTextが空でないかをチェックし、入力があればvector_list.add()でVectorに要素を追加します。その後、ArrayAdapterを生成してListViewにセットし、Toastメッセージで登録完了を通知します。
  • 入力チェック:名前が未入力の場合はsetError()によってエラーメッセージを表示します。
  • 更新ボタンの処理notifyDataSetChanged()invalidateViews()を呼び出すことで、ListViewの表示を最新の状態に刷新します。

アプリを実行してみよう

それでは、実際にアプリケーションを起動してみましょう。Android端末をパソコンに接続していることを前提とします。Android Studioから実行するには、プロジェクト内の任意のアクティビティファイルを開き、ツールバーのRunアイコンをクリックします。接続済みのモバイルデバイスを選択すると、端末に初期画面が表示されます。

AndroidのListViewでVectorクラスを使用する方法【初心者向け解説】

上記の実行結果のように、EditTextに入力した名前がVectorの要素としてアダプターに登録され、ListViewの一覧に順次追加されていくことが確認できます。この仕組みを応用すれば、より複雑なデータ管理やカスタムアダプターによるリスト表示にも発展させることができます。

  1. AndroidでConcurrentLinkedQueueを使う方法!スレッドセーフなキューの基本とサンプルコード

    ConcurrentLinkedQueueとは本題に入る前に、ConcurrentLinkedQueueの概要を簡単に確認しておきましょう。ConcurrentLinkedQueueは、リンクノードを基盤とした無制限(アンバウンド)のキューです。最大の特徴はスレッドセーフである点で、複数のスレッドから同時にアクセスしても安全に要素を操作できます。要素はFIFO(先入れ先出し)方式で管理され、新しい要素は常にキューの末尾(tail)から挿入されます。また、null値は許可されていない点にも注意が必要です。この記事では、AndroidアプリでConcurrentLinkedQueueを使用する方法

  2. 【Android】ConcurrentLinkedDequeの使い方をサンプルコード付きで解説

    ConcurrentLinkedDequeとは 例を始める前に、まずConcurrentLinkedDequeについて理解しておきましょう。ConcurrentLinkedDequeは、リンクノードをベースとした容量制限のない(アンバウンドな)両端キュー(Deque)です。最大の特徴は、複数のスレッドが同時にキューの要素へアクセスしても安全性が保証される点にあります。なお、このクラスはAPIレベル21(Android 5.0 Lollipop)以降で利用可能です。 本記事では、AndroidアプリでConcurrentLinkedDequeを使って要素を追加・表示する方法を、具体的なサンプルコ