AndroidのCopyOnWriteArrayListでindexOf()を使う方法
CopyOnWriteArrayListとは
例を見る前に、まずCopyOnWriteArrayListについて理解しておきましょう。CopyOnWriteArrayListはArrayListのスレッドセーフな派生クラスです。addやsetなどの変更操作を行う際に、内部の配列を新しくコピーしてから処理する仕組みを持っているため、複数スレッドから同時にアクセスされる環境でも安全にリストを操作できます。
本記事では、AndroidのCopyOnWriteArrayListでindexOf()メソッドを使用し、特定の要素の位置を取得する方法をサンプルコード付きで解説します。
手順1:新しいプロジェクトを作成する
Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成してください。
手順2:レイアウトファイルを編集する
次に、res/layout/activity_main.xml に以下のコードを追加します。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:gravity="center" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical"> <TextView android:id="@+id/actionEvent" android:textSize="40sp" android:layout_marginTop="30dp" android:layout_width="wrap_content" android:layout_height="match_parent" /> </LinearLayout>
上記のコードでは、CopyOnWriteArrayListの要素を画面に表示するためのTextViewを1つ配置しています。
手順3:MainActivity.javaを編集する
続いて、src/MainActivity.java に以下のコードを追加します。
package com.example.myapplication;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.CopyOnWriteArrayList;
public class MainActivity extends AppCompatActivity {
CopyOnWriteArrayList copyOnWriteArrayList;
String head;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
copyOnWriteArrayList = new CopyOnWriteArrayList<String>();
final TextView actionEvent = findViewById(R.id.actionEvent);
copyOnWriteArrayList.add("sai");
copyOnWriteArrayList.add("ram");
copyOnWriteArrayList.add("krishna");
copyOnWriteArrayList.add("prasad");
copyOnWriteArrayList.add("ram");
actionEvent.setText("" + copyOnWriteArrayList);
actionEvent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
actionEvent.setText("" + copyOnWriteArrayList.indexOf("prasad"));
}
});
}
}このコードでは、CopyOnWriteArrayListに5つの文字列要素を追加し、最初にリスト全体の内容をTextViewに表示しています。さらに、TextViewがタップされると、indexOf()メソッドによって「prasad」のインデックス番号を取得して表示します。
アプリを実行して結果を確認する
それでは、アプリを実行してみましょう。ここでは、実機のAndroidスマートフォンをパソコンに接続しているものとします。Android Studioからアプリを起動するには、プロジェクト内のアクティビティファイルのいずれかを開き、ツールバーの「Run」アイコンをクリックしてください。表示された選択肢から自分のモバイルデバイスを選ぶと、端末に以下のような初期画面が表示されます。

次に、画面上のTextViewをタップしてみてください。「prasad」のインデックス番号である「3」が、以下のように表示されます。

-
【Android】LocalBroadcastManagerの使い方を実例付きでわかりやすく解説
LocalBroadcastManagerとは? LocalBroadcastManagerは、アプリ内部だけで完結するブロードキャスト(Intent)の送受信を行うためのクラスです。システム全体や他アプリには通知されないため、セキュリティ面でも安全で、アプリ内のコンポーネント間でデータを受け渡したい場合に便利です。 本記事では、実際に動くサンプルプロジェクトを作りながら、LocalBroadcastManagerの基本的な実装手順をステップごとに紹介します。 Step 1:新規プロジェクトの作成 まず、Android Studioを起動し、「File → New Project」から新しい
-
【Android】ViewFlipperの使い方を徹底解説!ビュー切り替えアニメーションの実装方法
ViewFlipperとは?ViewFlipperは、複数の子ビューを重ねて保持し、一定間隔での自動切り替えやボタン操作による手動切り替えを、アニメーション効果付きで実現できるAndroidのウィジェットです。画像スライダー、オンボーディング画面、シンプルなカルーセルUIなどを作りたいときに非常に便利です。本記事では、ViewFlipperを使ってImageView・Button・TextViewをスライドアニメーションで切り替えるサンプルアプリを、ステップごとに詳しく解説します。Step 1:新規プロジェクトを作成するAndroid Studioを起動し、メニューから「File」→「New