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

AndroidのListViewを特定の位置までプログラムでスクロールさせる方法

この記事では、AndroidアプリでListViewをプログラムから操作し、指定したアイテム位置までスムーズにスクロールさせる方法を解説します。鍵となるのは、ListViewが標準で提供している smoothScrollToPosition() メソッドです。このメソッドを使えば、アニメーションを伴って目的の項目へ自然に移動でき、ユーザー体験を損なうことがありません。

実装のポイント:smoothScrollToPosition()とは

ListViewには主に2つのスクロール用メソッドが用意されています。

  • setSelection(int position) … 指定位置へ即座にジャンプします(アニメーションなし)。
  • smoothScrollToPosition(int position) … アニメーションしながら指定位置へ移動します。

本記事では、より自然な動きになる smoothScrollToPosition() を採用します。

実装手順

ステップ1:新しいプロジェクトを作成する

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

ステップ2:レイアウトファイル(activity_main.xml)を編集する

res/layout/activity_main.xml に以下のコードを追加します。上部にスクロール用のボタン、その下にListViewを配置したシンプルな構成です。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:id="@+id/rl"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ListView Scroll To Position 22" />
    <ListView
        android:id="@+id/listView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/btn" />
</RelativeLayout>

ステップ3:MainActivity.javaを実装する

src/MainActivity.java に以下のコードを記述します。サッカー選手の名前一覧をListViewに表示し、ボタンがクリックされると smoothScrollToPosition(22) を呼び出して、インデックス22番目の項目までスムーズにスクロールします。

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ListView listView = findViewById(R.id.listView);
        Button btn = findViewById(R.id.btn);
        String[] footballPlayers = new String[] {
            "Cristiano Ronaldo",
            "Lionel Messi",
            "Neymar Jnr",
            "Eden Hazard",
            "Isco",
            "Gareth Bale",
            "Sergio Buesquets",
            "Zlatan Ibrahimovic",
            "GG Buffon",
            "Iker Casillas",
            "Rafael Varane",
            "Zinedine Zidane",
            "Menphis Depay",
            "Gerard Pique",
            "Victor Valdes",
            "David De Gea",
            "Mo Salah",
            "Ronaldinio",
            "Marco Rues",
            "Asencio",
            "Luis Figo",
            "Sergio Ramos",
            "Maldini",
            "Marcelo",
            "Karim Benzema",
            "Sir Alex Firguson"
        };
        final List<String> footballPlayers = new ArrayList<>(Arrays.asList(footballPlayers));
        final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, footballPlayers);
        listView.setAdapter(arrayAdapter);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listView.smoothScrollToPosition(22);
            }
        });
    }
}

ステップ4:AndroidManifest.xmlを確認・編集する

androidManifest.xml には以下のように記述します。特別な権限は不要ですが、ランチャーアクティビティとして MainActivity が登録されていることを確認しましょう。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

アプリを実行してみよう

それでは、実際にアプリを実行してみましょう。ここでは、実機のAndroid端末をパソコンに接続しているものとします。Android Studioから実行するには、プロジェクト内のアクティビティファイルを開き、ツールバーにある「Run」アイコンをクリックしてください。表示される候補から自分のモバイル端末を選択すると、端末上に以下のような画面が表示されます。

AndroidのListViewを特定の位置までプログラムでスクロールさせる方法

ボタンをタップすると、リストがアニメーションしながらスクロールし、22番目の項目「Sergio Ramos」が画面に現れます。
このように、smoothScrollToPosition() を使えば、数行のコードで簡単に任意の位置への自動スクロールを実装できます。検索結果へのジャンプや「最新項目へ移動」ボタンなど、さまざまな場面で活用できるので、ぜひ覚えておきましょう。

  1. AndroidでGPSをプログラムから有効・無効に切り替える方法【サンプルコード付き】

    はじめに この記事では、AndroidアプリからGPS(位置情報サービス)の状態を確認し、ボタン操作で位置情報設定画面を開いてGPSの有効・無効を切り替える方法を、サンプルコード付きでわかりやすく解説します。 なお、セキュリティ保護の観点から、Android 4.4(APIレベル19)以降では、一般アプリが直接GPSをON/OFFすることはできません。そのため本サンプルでは、Settings.ACTION_LOCATION_SOURCE_SETTINGSインテントを使ってシステムの位置情報設定画面を開き、ユーザー自身に切り替えてもらう方式を採用しています。これはGoogleが推奨する標準的なア

  2. Androidアプリでプログラムから着信に自動応答する方法を解説

    この記事では、Androidアプリケーションからプログラムによって着信に自動応答する方法を、サンプルコードとともに段階的に解説します。電話機能を持つアプリや自動応答システムを開発したい方に役立つ内容です。 手順1:Android Studioで新規プロジェクトを作成する まず、Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。 手順2:レイアウトファイル(activity_main.xml)を編集する res/layout/activity_main.xml に以下のコードを