2016-11-01 13 views
7

Başlangıç ​​DataSource'unu alan bir ListView var. Kullanıcı daha sonra yeni bir DataSource ile ListView'i güncelleyecek bir arama çalıştırabilir. Ne yazık ki bu olduğunda, kaydırma konumu sıfırlanır, bu da ideal değildir.Tepki-yerel bir ListView DataSource'ı güncellemenin bir yolu var mı? Böylece kaydırma konumunu sıfırlamıyor?

Aynı ListView.DataSource nesnesini yeniden yaratmak yerine yenisini oluşturmak çalıştı, ama bu bana aynı sonuçları vermiştir

:

... 

dataSource: new ListView.DataSource({ 
    rowHasChanged: (r1, r2) => r1 !== r2 
}), 

componentWillReceiveProps(nextProps) { 
this.setState({ 
    dataSource: this.dataSource.cloneWithRowsAndSections({...}); 
} 

... 

dataSource değiştirildikten sonra ben ListView üzerinde scrollTo kullanarak çalıştı, ancak bu App çok etrafında atlamak için ... iyi bir deneyim değil. Kaydırma pozisyonunun sıfırlanmasını engelleyecek bir DataView'u veya ListView ayarı var mı?

ListView'de 2 yapışkan başlık vardır, üst üstbilgide 2 satırlık bir sayfa açıklaması ve 3 görüntü ızgarası oluşturan bir redux konteyneri vardır. İkinci bölüm, render edilmesi biraz ağır olan 50 bileşenin bir listesidir: kare bir görüntü, bir miktar metin ve birkaç SVG. Benim mevcut yöntem kaydırma konumunu zorlamak için onContentSizeChange kullanarak çalışır, ancak bu kaydırma konumu zıplama neden olur ve amatör görünüyor.

GÜNCELLEME: Liste Görünümü'nün dökümantasyonuna ve kaynak koduna girdiğinizde, sonuçta bir ScrollView oluşturur. İlk kaydırma konumunu ayarlamak için contentOffset'u kullanabilirim, ancak ListView DataSource güncellemelerinde yardımcı olmaz; hardcoding contentOffset bile yardımcı olmaz. Ben de gerçekten kullanıcı odaklı kaydırma önlemek vermedi hangi false scrollEnabled ayar denedik ama DataSource güncellenir ne zaman ListView kaydırma konumu hala sıfırlanır: s

GÜNCELLEME 2: Bazı başka hata ayıklama yaptık ve keşfettim önerilen rowHasChange ve sectionHeaderHasChanged işlevleri, yalnızca işlenmesi gereken satır/bölüm üstbilgileri oluşturma konusunda oldukça iyi bir iş çıkarır.

cevap

0

Sen kaydırma konumunu kaydetmek ve ListView için yeni sahne ayarladıktan sonra olabilir - animasyon olmadan scrollTo yapmak

+0

Bu stereodenis denedim ve "çalışıyor" ama UX kabul edilemez . Görüş çok fazla, zıplıyor ve bazen biraz kaymış yerlerde biter. – SomethingOn

+0

Sorunsuz bir örnek oluşturmaya çalışacağım ve sonra cevabımı güncelleyeceğim. Belki de kullanıcılara gösterilen yükleyicileri veya başka bir öğeyi eklemelisiniz, bu veri – stereodenis

+0

[** bunu kontrol edin] (http://stackoverflow.com/questions/3014089/maintain-save-restore-scroll-position- ne zaman geri dönen-ne-liste görünümü) veya [** İşte **] (https://groups.google.com/forum/#!topic/android-developers/5_Re2eHgaFc) –

0

Ne senin durumunda yapacağını zıplayan etkisini gizlemek için bir yükleme eğiren ile bindirme bir tür göstermektir ve sonra kaydırma ayarlandıktan sonra bindirmeyi gizlemek, RN için oldukça yeni olduğum için bunu nasıl başaramayacağımı söyleyemem ama kesinlikle

İlgili konular