2012-06-20 40 views
5

Kullanıcının listedeki öğelerin sırasını değiştirebileceği bir ListPreference arıyordum. Öğeler sürüklenebilir ve kullanıcı tarafından yeniden sipariş edilebilir.Sürüklenebilir öğelerle Liste Görünümü nasıl oluşturulur?

Bunu, özel ROM'umda (ve Cyanogenmod'ta gördüğümden neredeyse eminim) QuickPanel'de gördüm. Burada bir ekran görüntüsü yoluyla fikir edinmek için var:

Screenshot of the "widget Button Order" in QuickPanel Settings of Sabotage ROM

Ben özel ListView öğeleri yapmak ve ürün sürüklenebilir olduğunu belirtmek için simge de ayarlayabilirsiniz biliyorum, ama onları sürüklenebilir yapmak nasıl bilmiyorum ve siparişi buna göre değiştirin. Onları tercihlerinize kaydederken, kolayca uygulanabilecek this'u buldum.

PS: ...

Ben CyanogenMod biliyorum açık kaynak, ama bu özel bir şey için kaynak bulamadık :(ben alabilir yakın diğer ekrana yakın bir yerde olmalıdır this oldu Bu konuda herhangi bir ipucu için şimdiden

Teşekkür

GÜNCELLEME. Ben eklemeler ve değişikliklerle, kabul edilen yanıt dosyaları kullanılarak sona erdi Ben daha fazla referans için burada listeleyin am

    ..
  • Bu öğenin sürüklenebileceği görsel geri bildirimi uygulamak için özel bir Bağdaştırıcı (benim durumumdaki ArrayAdapter) kullanın, TextView yakınındaki bir ImageView. Bu isteğe bağlıdır.

  • Listeyi uygun şekilde güncellemek için bir DragListener ve RemoveListener ayarlayın. ListView bunu otomatik olarak yapmaz. Ve kullandığınız Adaptöre bağlıdır.

  • Bir ViewGroup'a bir Görünüm uygulayan bir satır vardı, bazı hatalar yaptı, bu yüzden herhangi bir sorun olmadan yayını kaldırdım, gerekli olmadı. (onInterceptTouchEvent yönteminde). TouchInterceptor yapıcısında veya FLING = 0; SLIDE = 1; TRASH = 2; numaralı telefondan mRemoveMode = 1; numaralı telefonu değiştirin veya FLING = 0; SLIDE = 1; TRASH = 2; numaralı telefondan birini seçin. Bence TRASH için bir kaynak da mevcut olmalı.

Aslında değil cevabım bağlantısından ama zaten vardı Cyanogenmod biri, dosyayı aldı, ama bu dosyaları aynıydı sanırım. bir başkasına yardımcı olur umarım

:

Bunlar

(yazılma sırasında, r12 de) projesinde asıl dosyalardır :)

+0

Bunun için standart bir işlev yoktur, bu nedenle onClick'i geçersiz kılmanız ve dokunma olayını algılamanız gerekir. Geçersiz kılma işleminiz büyük olasılıkla bir longClick etkinliği tarafından etkinleştirilecek, aksi halde kullanıcının bir öğeyi sürükleyip sürüklemeyeceğini veya listeyi kaydırıp kaydırmayacağını bilmiyorsunuz. – Christine

+0

@Christine [OnDragListener] (http://developer.android.com/reference/android/view/View.OnDragListener.html) kullanamazmıyım? – jadkik94

+0

@ jadkik94 Merhaba. Bu dosyaları kullanarak aynı şeyi uygulamaya çalışıyorum. Ama bu oldukça eski bir soru olduğu için, daha iyi bir şey mi yoksa daha çok sürüklenebilir bir liste uygulamak için daha uygun bir yöntem mi var diye merak ettim mi? Yine de bulamadım. Verebileceğiniz herhangi bir işaretçi takdir edecek .. Teşekkürler. – Anjani

cevap

5

Yapılması gereken yerleşik parçacık yok Bu, ancak çalma listelerinde şarkıların yeniden düzenlenmesine izin vermek için AOSP müzik çalar tarafından kullanılan özel uygulamaya bir göz atmak isteyebilirsiniz.ListView uzanan sınıf var ve MotionEvents ve yeniden sıralamayı onun tüm öğeleri taşıma yanı sıra öğeleri silme hareketi yapmak üzere çalıştırılır tespit sorumludur

TouchInterceptor.java

. Bunu, TrackBrowserActivity.java sınıfındaki bir etkinliğe uygulandığını görebilirsiniz.

Ayrıca dikkat etmeniz gereken üç arabirim vardır: DragListener, DropListener ve RemoveListener. Bu arabirimleri, bu olaylar için tetiklenmelerini sağlamak için geri çağırma listelerini kullanabilirsiniz, böylece liste sırasına yapılan değişiklikleri SavedPreferences'ınıza güncelleyebilirsiniz (ListView sizin için bunu işlemeyeceğinden).

Düşük düzeydeki tüm öğeler sizin için olduğundan ek işlevler eklemek için TouchInterceptor sınıfını kolayca genişletebilir veya değiştirebilirsiniz.

+0

Doğru, onu başka bir yerde gördüğümü biliyordum, neden bunu düşünmedim? [Dokümanlardaki] sürükle ve bırak etkinliklerini kullanmamaları gariptir (http://developer.android.com/guide/topics/ui/drag-drop.html). Her neyse, bunu asla yalnız yapamazdım. Teşekkürler, deneyeceğim ve size döneceğim. – jadkik94

+0

Sürükle ve Bırak API'si API 11 düzeyinde eklenmiştir ve bu uygulama API düzeyini 8 hedeflemektedir, bu nedenle muhtemelen bu API tamamlanmadan veya yaygın olarak kullanılabilir hale gelmeden önce yazılmıştır. – Victor

+0

Bu olabilir. Bir şey farkettim, TouchInterceptor sınıfının MusicPicker.java'da kullanıldığından emin misiniz? Bu sınıf orada içe aktarılmaz/kullanılmaz. – jadkik94

İlgili konular