2010-04-27 25 views

cevap

1
@Override 
protected void onPause() 
{ 
    // Save scroll position 
    SharedPreferences preferences = context.getSharedPreferences("SCROLL", 0); 
    SharedPreferences.Editor editor = preferences.edit(); 
    int scroll = mListView.getScrollY(); 
    editor.put("ScrollValue", scroll); 
    editor.commit(); 
} 

@Override 
protected void onResume() 
{ 
    // Get the scroll position 
    SharedPreferences preferences = context.getSharedPreferences("SCROLL", 0); 
    int scroll = preferences.getInt("ScrollView", 0); 
    mListView.scrollTo(0, scroll); 
} 
+0

Ben 'getSharedPreferences' kullanırsanız, o diske devam edecek demektir? yani telefonu yeniden başlattıktan sonra değeri koruyacak mı? Ya bunu istemiyorsam? Telefonu yeniden başlattığımda 0'dan başlayacak mı? – michael

+0

Kapanma dışında kalmaya devam edecektir. Bunu istemezseniz, değeri üye değişkenine yazabilir ve bunun devam edeceğini umabilirsiniz. App toplanan çöp almazsa gerekir. Sadece hangi tarafta hata yapmak istediğinize karar vermeniz gerekiyor. – CaseyB

+1

Sanırım onPause'daki satır 6, editor.putInt ("ScrollValue") okuyup, kaydırmalı); – Das

2

Sen kaydırma konumunu kaydetmek ve daha sonra onCreate veya onRestoreInstanceState ya geri yüklemek için kullanmak onSaveInstanceState kullanmalıdır.

http://developer.android.com...#onSaveInstanceState ...

+0

Yolunuzu denedim. mListView.getSelectedItemPosition(); Bana -1 ve mListView verin.getScrollY() bana 0 verir. Testimi yaptığımda, ListView'üme doğru kaydırırım. Neden çalışmadığı hakkında bir fikrin var mı? – michael

+0

Yolumu denemek için ne yaptın? – clahey

+0

Yaptım: korumalı boşluk açıkSaveInstanceState (Bundle outState) { super.onSaveInstanceState (outState); int scroll = mListView.getScrollY(); System.out.println ("scrollY" + kaydırma); } – michael

27

beyan küresel değişkenler:

int index = 0; 
ListView list; 

ve sizin ListViewonCreate() yılında bir başvuru yapın: onResume() yılında

list = (ListView) findViewById(R.id.my_list); 

Sonraki, bu satırı ekleyin son:

list.setSelectionFromTop(index, 0); 

Son olarak, yılında, sonuna aşağıdaki satırı ekleyin:

index = list.getFirstVisiblePosition(); 
+0

yok edildikten sonra da devam etmesini isteyip istemediğinize bağlı olarak bu int depolandığınız yerde Dahası, indeksin bir sharedPreferences nesnesine kaydedilmesini, böylece uygulamanın kapsam dışına çıkması durumunda, yine de – mray190

+1

@ mray190 dizinini korur durum durumunun ne için kaydedildiğidir. Bu değeri, yönlendirme değişikliklerinde bir pakette kaydedebilir, ardından görünüm yeniden oluşturulduğunda, bir Etkinlik veya Parça düzeyinde, kaydırılmış durumu geri yükleyebilirsiniz. – Phil

2

ListView.getScrollY() kullanarak kaydırma konumunu geri yüklemek için iyi çalışmaz unutmayın.

Bu tüm bakış kaydırma miktarı bahsediyor Android: ListView.getScrollY() - does it work?

gördüğünden, hemen hemen her zaman 0.

Bu değerin o da bana çoğu zaman oldu olacak ListView.setSelection() ile ListView.getFirstVisiblePosition() daha güvenilir çalışır.

7

basit Do ....

@Override 
protected void onPause() 
{ 
    index = listView.getFirstVisiblePosition(); 
    // store index using shared preferences 
} 

ve ..

@Override 
public void onResume() { 
super.onResume(); 
// get index from shared preferences 

if(listView != null){ 
    if(listView.getCount() > index) 
     listView.setSelectionFromTop(index, 0); 
    else 
     listView.setSelectionFromTop(0, 0); 
} 
+1

Kodun bir açıklaması yardımcı olabilir. –