SORU
25 ŞUBAT 2010, PERŞEMBE


Nasıl kapalı (dairesel) bir liste Görünümü oluşturmak için?

Kapalı (yuvarlak) gibi davranır: özelleştirilmiş bir liste Görünümü (veya benzeri) oluşturmak istiyorum

  1. aşağı - son öğeden sonra kaydırma ulaşıldı başladığı ilk (.., n-1, n, 1, , ..2)
  2. Yukarı ilk öğeyi kaydettikten son başlar (.., 2, 1, n, n-1, ..) ulaşıldı

Kavramsal olarak basit görünüyor ama, görünüşe göre, bunu yapmak için basit bir yaklaşım yok. Herkes doğru çözüm için beni işaret edebilir ? Teşekkür ederim !

Zaten bir cevap (Android-Geliştiriciler google gruplar Boston Sokaklarında) aldım, ama bir şekilde çirkin:) gibi geldi

Benim kendi oluşturarak yaptım liste-adaptör (alt BaseAdapter).

Liste-adaptör böyle bir başıma kodlu onun bu şekilde getCount() yöntemi döndürür HUUUUGE bir numara.

Ve madde 'x' seçilirse, bu takdirde madde adaptör karşılık gelir pozisyon='adaptör.() getCount/2 x'

Ve benim adaptörün yöntemi getıtem(int position), benim baktığım yedekler dizi adaptörü ve getir Endeksi madde: (pozisyon-getCount()/2) % myDataİtems.uzunluğu

Biraz daha 'özel'yapmanız gereken doğru bir işi yapmak için falan ama siz anladınız.

Prensip olarak, hala mümkün sonuna ulaşmak ya da başlangıcı eğer getCount ayarlarsanız, ama liste() bir milyon dolar civarında, bu çok zor. yapmak için :-)

CEVAP
9 ŞUBAT 2011, ÇARŞAMBA


Meslektaşım Joe ve basit bir şekilde aynı sorunu çözmek için bulduğumuzu düşünüyorum. Yerine BaseAdapter uzanan gerçi bizim çözüm ArrayAdapter uzatıyoruz.

Kodu fallows gibi


public class CircularArrayAdapter extends ArrayAdapter
{   

        public static final int HALF_MAX_VALUE = Integer.MAX_VALUE/2;
        public final int MIDDLE;
        private T[] objects;

        public CircularArrayAdapter(Context context, int textViewResourceId, T[] objects)
        {
            super(context, textViewResourceId, objects);
            this.objects = objects;
            MIDDLE = HALF_MAX_VALUE - HALF_MAX_VALUE % objects.length;
        }

        @Override
        public int getCount()
        {
            return Integer.MAX_VALUE;
        }

        @Override
        public T getItem(int position) 
        {
            return objects[position % objects.length];
        }
 }

Bu bir sınıf nesne türü bir T herhangi bir şey olabilir) almak CircularArrayAdapter denilen oluşturur ve bu dizi bir listesini oluşturmak için kullanır. T yaygın bir şey olsa da bir dize.

Yapıcı rağmen sürekli olarak adlandırılan bir orta başlatır ArrayAdapter için aynıdır. Bu listenin ortalarında. Dizi ORTA uzunlukta listenin ortalarında Liste Görünümü center için kullanılabilir ne olursa olsun.

getCount büyük bir liste oluşturmak yukarıda yapıldığı gibi büyük bir değeri döndürmek için overrided.

getıtem dizisindeki sahte pozisyonuna geri dönmek için overrided. Listeyi doldururken böylece listesini döngü bir şekilde nesnelerle dolu.

Bu noktada CircularArrayAdapter sadece dosya liste Görünümü oluşturmak ArrayAdapter değiştirir.

Merkezi nadas hattı dosyanızda Liste Görünümü nesne sonra liste Görünümü oluşturma eklenmelidir Liste Görünümü başlatıldı:

listViewObject.setSelectionFromTop(nameOfAdapterObject.MIDDLE, 0);

ve ortada sürekli kullanarak daha önce görünümü ekranın üst kısmında Listesinin bir numaralı maddesi ile ortalanır listesi için başlatıldı.

: ) ~ Şerefe, bu çözüm yararlı olur umarım.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Caroline Martin

    Caroline Mar

    19 EYLÜL 2008
  • TheMasterOfHell100

    TheMasterOfH

    13 AĞUSTOS 2011
  • TROPFEST

    TROPFEST

    27 Mart 2007