यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।
वर्चुअल सूची में सर्वर डेटा को पेजिनेट कैसे करें
उद्देश्य. एक बड़े डेटा सेट को दिखाएँ जिसका स्रोत पेजिनेटेड है (जैसे: REST API) बिना सब कुछ एक साथ
लोड किए। PagedDataAdapter एक पृष्ठों का LRU कैश बनाए रखता है: केवल एक सीमित संख्या में पृष्ठ
मेमोरी में रहते हैं; जब आप ऐसे क्षेत्र में स्क्रॉल करते हैं जिसका डेटा हटा दिया गया था, तो एक स्पिनर
दिखता है और पृष्ठ को loadPage के जरिए फिर से लोड किया जाता है। पृष्ठ लोड होने के दौरान स्क्रॉल
लॉक रहता है।
उपयोग की गई APIs
abstract class PagedDataAdapter(int pageSize, int maxCachedPages)— प्रति पृष्ठpageSizeआइटम; अधिकतमmaxCachedPagesपृष्ठ मेमोरी में (LRU)।VirtualListView.DataAdapterको लागू करता है।abstract int getTotalCount()— सर्वर पर आइटम की कुल संख्या (सूची काgetCount()बन जाता है)।abstract void loadPage(int pageIndex, PageCallback callback)— एक पृष्ठ को असिंक्रोनस रूप से लोड करता है; समाप्त होने पर,callback.onPageLoaded(pageIndex, items)कॉल करें। इसे किसी भी थ्रेड से बुलाया जा सकता है — सूची UI पर स्विच कर देती है।abstract Component createView() throws Exception— पुन: प्रयोज्य खाली view बनाता है।abstract void bindItem(Component view, Object item, int index) throws Exception— view को आइटम के ऑब्जेक्ट से भरता है (टेक्स्ट से नहीं)। कच्चेbindViewसे भिन्न: यहाँ आपको पृष्ठ द्वारा पहले से हल किया गया आइटम मिलता है।interface PageCallback { void onPageLoaded(int pageIndex, Object[] items); }PagedDataAdapter.isAvailable(int index)— true यदि इंडेक्स पहले से कैश में है।PagedDataAdapter.clearCache()— कैश और लोडिंग स्थिति साफ़ करता है।
पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.graphics.*; // Relative (VirtualListView के लिए)
/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
/** अनुकरणित व्यावसायिक आइटम — अपनी वास्तविक entity से बदलें। */
static class Registro
{
final String nome;
Registro(String nome) { this.nome = nome; }
String getNome() { return nome; }
}
static final int totalNoServidor = 12345; // उदा.: API का metadata
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
PagedDataAdapter adapter = new PagedDataAdapter(20, 5) // 20 आइटम/पेज, मेमोरी में 5 पेज
{
public int getTotalCount()
{
return totalNoServidor;
}
public void loadPage(int pageIndex, PageCallback callback)
{
// असिंक्रोनस: यहाँ हम background में सर्वर की प्रतिक्रिया का अनुकरण करते हैं
onUI(() ->
{
Object[] registros = new Object[20];
for (int i = 0; i < registros.length; i++)
registros[i] = new Registro("Item " + (pageIndex * 20 + i));
callback.onPageLoaded(pageIndex, registros);
});
}
public Component createView() throws Exception
{
return new Label(""); // पुन: उपयोग योग्य सरल पंक्ति
}
public void bindItem(Component view, Object item, int index) throws Exception
{
Registro r = (Registro) item; // पेज का पहले से हल किया गया आइटम
((Label) view).setText(r.getNome());
}
};
// PagedDataAdapter एक DataAdapter है: सीधे VirtualListView को पास करें
VirtualListView lista = new VirtualListView(Relative.ofFont(3f), adapter);
add(LAY_FILL, lista);
}
}
नीचे का अंश केवल मुख्य भाग दिखाता है। इसे चलाने के लिए, इसे ऊपर दिए
MainWindowढाँचे में रखें।
न्यूनतम अंश
// स्रोत में सत्यापित: PagedDataAdapter.java
PagedDataAdapter adapter = new PagedDataAdapter(20, 5) // 20 आइटम/पेज, मेमोरी में 5 पेज
{
public int getTotalCount()
{
return totalNoServidor; // उदा.: 12345 (API के metadata से आया)
}
public void loadPage(int pageIndex, PageCallback callback)
{
// असिंक्रोनस: अनुरोध ट्रिगर करता है और callback के ज़रिए जवाब देता है
api.buscarPagina(pageIndex, 20, registros ->
callback.onPageLoaded(pageIndex, registros)); // registros = Object[]
}
public Component createView() throws Exception
{
return new Label(""); // पुन: उपयोग योग्य सरल पंक्ति
}
public void bindItem(Component view, Object item, int index) throws Exception
{
Registro r = (Registro) item; // पेज का पहले से हल किया गया आइटम
((Label) view).setText(r.getNome());
}
};
// PagedDataAdapter एक DataAdapter है: सीधे VirtualListView को पास करें
VirtualListView lista = new VirtualListView(Relative.ofFont(3f), adapter);
layout.add(1f, lista);
और गहराई में जाएँ
VirtualListViewकंस्ट्रक्टर में स्वचालित रूप से adapter से जुड़ जाता है (adapter.listView = this) — मैन्युअल रूप से जोड़ने की जरूरत नहीं।- जब तक
loadPageउड़ान में है, adapterwaitingForDataको चिह्नित करता है औरVirtualListViewpan/fling/wheel को अवरुद्ध करता है और वर्तमान fling को रोक देता है (पृष्ठ आने पर फिर शुरू होता है)। - append द्वारा अनंत स्क्रॉल के लिए (बिना LRU कैश के), देखें carregar-mais.md।
- विजेट गाइड: PagedDataAdapter · सर्वोत्तम अभ्यास: प्रदर्शन और बड़ी सूचियाँ · आधिकारिक स्रोत: अध्याय 15
क्या यह पृष्ठ उपयोगी था?प्रतिक्रिया के लिए धन्यवाद!