Programlı olarak a'daki belirli bir konuma nasıl kayabilirim ListView
?
Örneğin, bir var String[] {A,B,C,D....}
ve üst görünür öğeyi ListView
benim dizin 21 için ayarlamanız gerekir String[]
.
Programlı olarak a'daki belirli bir konuma nasıl kayabilirim ListView
?
Örneğin, bir var String[] {A,B,C,D....}
ve üst görünür öğeyi ListView
benim dizin 21 için ayarlamanız gerekir String[]
.
Yanıtlar:
Doğrudan kaydırma için:
getListView().setSelection(21);
Yumuşak bir kaydırma için:
getListView().smoothScrollToPosition(21);
smoothScrollToPosition
çalışmıyor, herhangi bir öneri?
listView.post(() -> listView.smoothScrollToPosition());
getListView().smoothScrollToPositionFromTop(position,offset,duration);
Parametreler
konumu -> Kaymaya kaydırılacak
konum ----> Kaydırma tamamlandığında görünümün üstünden konumun piksel cinsinden istenen mesafesi-> Kaydırma
için kullanılacak milisaniye sayısı
Not: API 11'den.
HandlerExploit'in cevabı aradığım şeydi, ancak Liste görünümüm oldukça uzun ve aynı zamanda alfabe kaydırma aracıyla. Sonra aynı fonksiyonun diğer parametreleri de alabileceğini buldum :)
Düzenleme: (AFD'lerin önerisinden)
Geçerli seçimi konumlandırmak için:
int h1 = mListView.getHeight();
int h2 = listViewRow.getHeight();
mListView.smoothScrollToPositionFromTop(position, h1/2 - h2/2, duration);
Kodunuzu aşağıdaki gibi işleyiciye koyun,
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);
}
ve sonra bu yöntemi
timerDelayRunForScroll(100);
ŞEREFE !!!
OnGroupExpandListener ayarladım ve onGroupExpand () geçersiz kılma:
ve seçili öğeyi ayarlayan ve seçimi y piksellerini ListView'in üst kenarından konumlandıran setSelectionFromTop () yöntemini kullanın. (Dokunmatik moddaysa, öğe seçilmez ancak yine de uygun şekilde konumlandırılır.) (Android dokümanlar)
yourlist.setOnGroupExpandListener (new ExpandableListView.OnGroupExpandListener()
{
@Override
public void onGroupExpand(int groupPosition) {
expList.setSelectionFromTop(groupPosition, 0);
//your other code
}
});
Listview
Görünmüyorsa o zaman bu kullanırsanız kaydırma kaydırma varsayılan olarak üstüne konumlandırılmış, ama istiyorum edilecektir:
if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position)
listView1.setSelection(position);
Gmail uygulaması gibi benzer bir işlev arayan biri varsa,
Liste görünümü kaydırma varsayılan olarak en üste yerleştirilir. İpucu için teşekkürler. amalBit. Sadece çıkartın. Bu kadar.
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);
Düğmesini kullanarak YUKARI / Aşağı düğmelerini kullanarak kaydırmayı görüntüleyin.
Birisi listeyi işlemekle ilgileniyorsa düğmesini kullanarak bir satır yukarı / aşağı görüntüleyin. sonra.
public View.OnClickListener onChk = new View.OnClickListener() {
public void onClick(View v) {
int index = list.getFirstVisiblePosition();
getListView().smoothScrollToPosition(index+1); // For increment.
}
});
Bu benim için işe yaradı. AmalBit ve Melbourne Lopes tarafından verilen cevapların kombinasyonu
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);
}
ve sonra şu yöntemi çağırın:
timerDelayRunForScroll(400);
onun kolay liste görünümü. set seçimi (konum); ya da konumunuzu paylaşılan ön ödeme ile kaydedebilirsiniz ve aktiviteye başladığınızda o int tercihlerini ve ayarını alırsınız.
-Listenin sadece yukarı doğru \ şafakın belirli bir konuma gelmesini istiyorsanız:
myListView.smoothScrollToPosition(i);
- myListView'da belirli bir öğenin konumunu almak istiyorsanız:
myListView.getItemAtPosition(i);
-Ayrıca bu myListView.getVerticalScrollbarPosition(i);
size yardımcı olabilir.
İyi şanslar :)
Bir listenin kaydırma konumunu tam olarak tanımlamak için iki şeye ihtiyacınız vardır
Geçerli listeyi görüntülemek için Kaydırma konumunu görüntüleyin:
int firstVisiblePosition = listView.getFirstVisiblePosition();
int topEdge=listView.getChildAt(0).getTop(); //This gives how much the top view has been scrolled.
ListView Kaydırma konumunu ayarlamak için:
listView.setSelectionFromTop(firstVisiblePosition,0);
// Note the '-' sign for scrollTo..
listView.scrollTo(0,-topEdge);
Bu çözümü iki farklı düğme kullanarak yukarı ve aşağı kaydırmaya izin vermek için buldum.
@Nepster tarafından önerildiği gibi mevcut konumu almak için getFirstVisiblePosition () ve getLastVisiblePosition () kullanarak kaydırma programlı olarak uygulamak.
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);
}
}
});
}