Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีเลื่อน ListView ไปยังตำแหน่งที่กำหนดแบบโปรแกรมเมติกใน Android

ภาพรวม

ตัวอย่างนี้สาธิตวิธีการเลื่อน (Scroll) ListView ไปยังตำแหน่งที่กำหนด (Position) โดยใช้เมธอด smoothScrollToPosition() ซึ่งจะเลื่อนแบบ Smooth Animation

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

สร้างโปรเจกต์ Android ใหม่ใน Android Studio

ขั้นตอนที่ 2: ออกแบบ Layout (res/layout/activity_main.xml)

<?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="เลื่อนไปตำแหน่ง 22" />

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/btn" />

</RelativeLayout>

ขั้นตอนที่ 3: เขียนโค้ด MainActivity (src/MainActivity.java)

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);

        // ข้อมูลนักฟุตบอล 30 ราย
        String[] footballPlayers = new String[] {
            "Cristiano Ronaldo", "Lionel Messi", "Neymar Jnr",
            "Eden Hazard", "Isco", "Gareth Bale",
            "Sergio Busquets", "Zlatan Ibrahimovic", "Gianluigi Buffon",
            "Iker Casillas", "Rafael Varane", "Zinedine Zidane",
            "Memphis Depay", "Gerard Pique", "Victor Valdes",
            "David De Gea", "Mohamed Salah", "Ronaldinho",
            "Marco Reus", "Asensio", "Luis Figo",
            "Sergio Ramos", "Maldini", "Marcelo",
            "Karim Benzema", "Sir Alex Ferguson", "Xavi",
            "Iniesta", "Pique", "Puyol", "Casillas"
        };

        final List<String> playersList = new ArrayList<>(Arrays.asList(footballPlayers));
        final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(
            this, android.R.layout.simple_list_item_1, playersList);
        
        listView.setAdapter(arrayAdapter);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 🔑 เลื่อนไปตำแหน่งที่ 22 (Index 22 = รายการที่ 23)
                listView.smoothScrollToPosition(22);
            }
        });
    }
}

ขั้นตอนที่ 4: AndroidManifest.xml

<?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>

เมธอด Scroll อื่นๆ ของ ListView

Methodคำอธิบาย
smoothScrollToPosition(int position)เลื่อนไปตำแหน่งพร้อม Animation (แนะนำ)
setSelection(int position)กระโดดไปตำแหน่งทันที ไม่มี Animation
smoothScrollToPositionFromTop(int position, int offset)เลื่อนไปตำแหน่งพร้อม Offset จากด้านบน
smoothScrollBy(int distance, int duration)เลื่อนระยะทางที่กำหนดในเวลาที่กำหนด

สำหรับ RecyclerView (แทน ListView ในปัจจุบัน)

// RecyclerView
recyclerView.smoothScrollToPosition(position);

// หรือใช้ LinearLayoutManager
LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
layoutManager.scrollToPositionWithOffset(position, offset);

การทดสอบ

รันแอป กดปุ่ม "เลื่อนไปตำแหน่ง 22" ListView จะเลื่อนลงไปที่รายการ "Sir Alex Ferguson" แบบ Smooth

วิธีเลื่อน ListView ไปยังตำแหน่งที่กำหนดแบบโปรแกรมเมติกใน Android