2010-01-04 31 views
33

Ekranda daha çok öğe bulunan bir SimpleAdapter ile oluşturulmuş bir Android ListView var. Liste kaydırıldıktan sonra listedeki ilk görünür öğenin veri modelindeki konumu almam gerekir.Android ListView: Görünür öğenin veri dizinini al

Temel olarak aşağıdaki gibi bir işlev istiyorum: listView.getChildAt(0).getPositionInDataModel(). Yararlı görünen getItemId(position) gibi bir kaç işlevi vardır;

ancak, SimpleAdapter uygulaması, umduğum gibi bir satır kimliği değil, yalnızca iletilen konumu döndürür.

Kaba bir güç çözümü Görünümü 0 dizininde almak ve bağdaştırıcıdaki her öğeye ait görünümle karşılaştırmak olacaktır. Ancak, adaptörden belirli bir konum için görünümü elde etmenin kolay bir yolu yoktur.

Herhangi bir fikri olan var mı?

cevap

90

Çok kolay. Sadece ListView.getFirstVisiblePosition() + indexYouWant kullanın. Örneğin, ListView'da görüntülenen ikinci çocuğun adaptöründeki pozisyonu almak için, sadece getFirstVisiblePosition() + 1 kullanın.

Bu ise :)

+2

Vay, bunu kaçırdığına inanamıyorum. Böyle bir işlev için her yere bakıyordum. Beklemediğim bir üst sınıfta tanımlandığı için olmalı. Hala bu javadoc stiline alışmak ... İşaretlediğiniz için teşekkürler! –

+0

@RomainGuy, ListView performansımı kaydettiniz ... –

+0

Gridview'ımda getFirstVisiblePosition() ve getLastVisiblePosition() arasındaki görünümlerin bazıları sıfırdır. Görüşleri geri dönüştürüyorum - sebebi bu mu? Özellikle görsel olarak göremediğimi görebildiğimden, görünür görünümlerin null olmamasını garanti ederim. – Laurent

1
listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 
{ 
    public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) 
    { 
     AisleId= parent.getSelectedItemId(); 
    } 
    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 
     // TODO Auto-generated method stub 
    } 
}); 

yukarıdaki cevapta gösterilen tüm korkunç şeyler gerek yok biz liste öğesi kimliği parent.getSelectedItemId alacak();

-1

getPositionForView(View) (see documentation) kullanın. Bu yöntemin ana avantajı aynı zamanda bir öğenin alt View s ile çalışır.

+1

Bu neden azalıyordu? Çalışmıyor mu? –

+0

Sadece soruya cevap vermiyor –