Ich möchte ein paar Sachen machen. Ich möchte lazy loading in ListView
machen. Meine ListView
enthalten mehr als 10.000 Daten & nur in TextView
. also kann ich nicht alle diese Daten beim ersten Mal laden, wenn ich die Listenaktivität starte. Es ist nicht effizient, so kann ich zuerst 20 oder 30 Elemente in Liste laden. weiter werden die Zeilen der ListView
geladen, wenn ich über sie blättern. Also, wenn ich letzten Index von ListView
auf dem letzten Index erreiche, werde ich Fortschrittsbalken n setzen, es wird bemerken, dass die neuen Daten geladen werden, so dass zu dieser Zeit neue Daten mit dem letzten + 1 Index geladen werden. Wie kann ich das machen?Android listview lazy loading
Antwort
Sie können dies erreichen, indem Sie endlose Adapter-Implementierung verwenden. Das macht genau das, was Sie wollen. Sie können auch die Anzahl der Zeilen begrenzen, die pro Bildlauf aktualisiert werden sollen. Hier ist ein Link zu.,
Android: Implementing progressbar and "loading..." for Endless List like Android Market
https://github.com/commonsguy/cwac-endless
es zu benutzen, Sie EndlessAdapter erweitern Einzelheiten zu geben, wie die Endlosigkeit zu handhaben. Insbesondere müssen Sie in der Lage sein, eine Zeilenansicht unabhängig von einer der Zeilen in Ihrem tatsächlichen Adapter bereitzustellen, die als Platzhalter dient, während Sie in einer anderen Methode die tatsächlichen Daten in Ihren Hauptadapter laden. Dann, mit ein wenig Hilfe von Ihnen, geht es nahtlos in die neuen Daten über.
Danke, Alter, lass mich das versuchen. – Jai
Link ist jetzt kaputt! :( –
// in Aufruf Funktion gesetzt:
@Override
public View onCreateView(android.view.LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
ScrollListener scrollListener = new ScrollListener();
listView.setOnScrollListener(scrollListener);
}
und innere Klasse:
class ScrollListener implements OnScrollListener
{
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
{
int size = searchedPeople.size();
if(isScrolled && totalItemCount != 0 && size < totalPeoples)
{
if(firstVisibleItem + visibleItemCount >= totalItemCount)
{
yourfunction(size, size + limit); // call service in your functioin
isScrolled = false;
}
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState)
{
}
}
Machen Sie Ihre Listen blättern schneller: -
- Reduzieren Sie die Anzahl der verwendeten Bedingungen in der
getView
Ihres Adapters. - Reduzieren Sie die Anzahl der Garbage Collection Warnungen, die Sie in den Protokollen
- Add-Scroll-Funktion erhalten (schränken die Anzahl der Zeilen pro Scrollaufgefrischt werden)
hinzufügen onScrollListener zur Listenansicht. Wenn der Benutzer scrollt, prüfen Sie, ob sich das ListView dem Ende nähert. Wenn ja, rufen Sie weitere Daten ab. Als Beispiel:
public abstract class LazyLoader implements AbsListView.OnScrollListener {
private static final int DEFAULT_THRESHOLD = 10 ;
private boolean loading = true ;
private int previousTotal = 0 ;
private int threshold = DEFAULT_THRESHOLD ;
public LazyLoader() {}
public LazyLoader(int threshold) {
this.threshold = threshold;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if(loading) {
if(totalItemCount > previousTotal) {
// the loading has finished
loading = false ;
previousTotal = totalItemCount ;
}
}
// check if the List needs more data
if(!loading && ((firstVisibleItem + visibleItemCount) >= (totalItemCount - threshold))) {
loading = true ;
// List needs more data. Go fetch !!
loadMore(view, firstVisibleItem,
visibleItemCount, totalItemCount);
}
}
// Called when the user is nearing the end of the ListView
// and the ListView is ready to add more items.
public abstract void loadMore(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount);
}
Aktivität:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
ListView listView = (ListView) findViewById(R.id.listView);
listView.setOnScrollListener(new LazyLoader() {
@Override
public void loadMore(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// Fetch your data here !!!
}
});
}
}
Sie die vollständige Implementierung at this link
- 1. Implizite Lazy Loading vs Explizite Lazy Loading
- 2. Lazy Loading vs Eager Loading
- 3. UITableView Lazy Loading Optimierung
- 4. Lazy Loading in NHibernate
- 5. JFreeChart & Lazy loading
- 6. Federdaten Hibernate Lazy Loading
- 7. Doktrin lazy loading
- 8. ASP.NET HoverMenuExtender Lazy Loading
- 9. Lazy Loading UICollectionView Bilder
- 10. lazy loading und $ ocLazyLoad
- 11. Verwendet URLClassLoader Lazy Loading?
- 12. webpack 2 lazy loading
- 13. C# Ajax Lazy Loading
- 14. Lazy Loading with Ninject
- 15. Lazy loading Navigationseigenschaften
- 16. gwt lazy loading
- 17. jQuery Cycle Lazy Loading
- 18. Lazy loading, Deferred Laden, eifrig Loading LINQ
- 19. Schienen 3: Lazy Loading versus Eager Loading
- 20. Lazy loading, Deferred Loading und Eager Loading im Entity-Framework
- 21. NSCollectionView lazy-loading-ähnliches Verhalten
- 22. Problem mit Lazy Loading-Implementierung
- 23. Lazy Loading Variablen in Vorlagen
- 24. Lazy Loading in Rails 3.2.6
- 25. Lazy Loading vermeiden Doctrine Symfony2
- 26. Entity Framework Lazy Loading perfomance
- 27. Async Lazy Loading mit Aufgaben
- 28. Hibernate Lazy Loading wirft JsonMappingException
- 29. Lazy Loading templates in Meteor
- 30. Ist Lazy Loading wirklich schlecht?
könnten Sie zeigen, was Sie haben versucht, finden kann? – gideon
ya ich habe das Bild hier als Beispiel hinzugefügt ... überprüfen Sie dieses – Jai
Wie wäre es mit Picasso? Entspricht das Ihrem Bedarf? http://square.github.io/picasso/ – phi