ภาพรวม
ตัวอย่างนี้สาธิตวิธีการเลื่อน (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
