Bagaimana saya bisa menggulir ke posisi tertentu dalam program ListView
?
Sebagai contoh, saya punya String[] {A,B,C,D....}
, dan saya perlu mengatur item yang terlihat paling atas ListView
ke indeks 21 saya String[]
.
Bagaimana saya bisa menggulir ke posisi tertentu dalam program ListView
?
Sebagai contoh, saya punya String[] {A,B,C,D....}
, dan saya perlu mengatur item yang terlihat paling atas ListView
ke indeks 21 saya String[]
.
Jawaban:
Untuk gulir langsung:
getListView().setSelection(21);
Untuk gulir yang lancar:
getListView().smoothScrollToPosition(21);
smoothScrollToPosition
tidak berfungsi, ada saran?
listView.post(() -> listView.smoothScrollToPosition());
getListView().smoothScrollToPositionFromTop(position,offset,duration);
Posisi parameter -> Posisi yang akan digulir untuk
mengimbangi ----> Jarak yang diinginkan dalam piksel posisi dari atas tampilan ketika pengguliran selesai
durasi-> Jumlah milidetik untuk digunakan untuk gulir
Catatan: Dari API 11.
Jawaban HandlerExploit adalah apa yang saya cari, tetapi listview saya cukup panjang dan juga dengan scroller alfabet. Kemudian saya menemukan bahwa fungsi yang sama dapat mengambil parameter lain juga :)
Edit: (Dari saran AFD)
Untuk memposisikan pilihan saat ini:
int h1 = mListView.getHeight();
int h2 = listViewRow.getHeight();
mListView.smoothScrollToPositionFromTop(position, h1/2 - h2/2, duration);
Masukkan kode Anda di handler sebagai berikut,
public void timerDelayRunForScroll(long time) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
try {
lstView.smoothScrollToPosition(YOUR_POSITION);
} catch (Exception e) {}
}
}, time);
}
dan kemudian memanggil metode ini seperti,
timerDelayRunForScroll(100);
BERSULANG!!!
Saya telah menetapkan OnGroupExpandListener dan menimpa onGroupExpand () sebagai:
dan gunakan metode setSelectionFromTop () yang Menetapkan item yang dipilih dan menempatkan pemilihan piksel y dari tepi atas ListView. (Jika dalam mode sentuh, item tidak akan dipilih tetapi masih akan diposisikan dengan tepat.) (Dokumen android)
yourlist.setOnGroupExpandListener (new ExpandableListView.OnGroupExpandListener()
{
@Override
public void onGroupExpand(int groupPosition) {
expList.setSelectionFromTop(groupPosition, 0);
//your other code
}
});
The Listview
gulir akan diposisikan ke atas secara default, tetapi ingin gulir jika tidak terlihat maka menggunakan ini:
if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position)
listView1.setSelection(position);
Jika seseorang mencari fungsi serupa seperti aplikasi Gmail,
Gulir Listview akan diposisikan ke atas secara default. Terima kasih atas petunjuknya. amalBit. Kurangi saja. Itu dia.
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
int h1 = mDrawerList.getHeight();
int h2 = header.getHeight();
mDrawerList.smoothScrollToPosition(h2-h1);
}
}, 1000);
Menangani daftar Lihat menggulir menggunakan ATAS / Bawah menggunakan tombol
Jika seseorang tertarik menangani listView satu baris naik / turun menggunakan tombol. kemudian.
public View.OnClickListener onChk = new View.OnClickListener() {
public void onClick(View v) {
int index = list.getFirstVisiblePosition();
getListView().smoothScrollToPosition(index+1); // For increment.
}
});
Inilah yang bekerja untuk saya. Kombinasi jawaban oleh amalBit & Melbourne Lopes
public void timerDelayRunForScroll(long time) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
try {
int h1 = mListView.getHeight();
int h2 = v.getHeight();
mListView.smoothScrollToPositionFromTop(YOUR_POSITION, h1/2 - h2/2, 500);
} catch (Exception e) {}
}
}, time);
}
dan kemudian panggil metode ini seperti:
timerDelayRunForScroll(400);
pemilihan list-view.set yang mudah (Anda pos); atau Anda dapat menyimpan posisi Anda dengan prefrence bersama dan ketika Anda memulai aktivitas itu mendapatkan preferensi dan setelion untuk int itu
-Jika Anda hanya ingin daftar bergulir \ fajar ke posisi tertentu:
myListView.smoothScrollToPosition(i);
-jika Anda ingin mendapatkan posisi item tertentu di myListView:
myListView.getItemAtPosition(i);
-juga ini myListView.getVerticalScrollbarPosition(i);
bisa membantu kamu.
Semoga berhasil :)
Anda memerlukan dua hal untuk menentukan posisi gulir listView secara tepat:
Untuk mendapatkan daftar saat ini, Lihat posisi Gulir:
int firstVisiblePosition = listView.getFirstVisiblePosition();
int topEdge=listView.getChildAt(0).getTop(); //This gives how much the top view has been scrolled.
Untuk mengatur listView posisi Gulir:
listView.setSelectionFromTop(firstVisiblePosition,0);
// Note the '-' sign for scrollTo..
listView.scrollTo(0,-topEdge);
Saya menemukan solusi ini untuk memungkinkan gulir ke atas dan ke bawah menggunakan dua tombol yang berbeda.
Seperti yang disarankan oleh @Nepster saya mengimplementasikan gulir secara terprogram menggunakan getFirstVisiblePosition () dan getLastVisiblePosition () untuk mendapatkan posisi saat ini.
final ListView lwresult = (ListView) findViewById(R.id.rds_rdi_mat_list);
.....
if (list.size() > 0) {
ImageButton bnt = (ImageButton) findViewById(R.id.down_action);
bnt.setVisibility(View.VISIBLE);
bnt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(lwresult.getLastVisiblePosition()<lwresult.getAdapter().getCount()){
lwresult.smoothScrollToPosition(lwresult.getLastVisiblePosition()+5);
}else{
lwresult.smoothScrollToPosition(lwresult.getAdapter().getCount());
}
}
});
bnt = (ImageButton) findViewById(R.id.up_action);
bnt.setVisibility(View.VISIBLE);
bnt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(lwresult.getFirstVisiblePosition()>0){
lwresult.smoothScrollToPosition(lwresult.getFirstVisiblePosition()-5);
}else{
lwresult.smoothScrollToPosition(0);
}
}
});
}