यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।
लोड-मोर (अनंत स्क्रॉल) कैसे लागू करें
उद्देश्य. जैसे-जैसे उपयोगकर्ता सूची के अंत के पास पहुँचता है, स्वचालित रूप से अधिक डेटा लोड करें, मौजूदा dataset में आइटम संलग्न करते हुए (append)। LRU कैश वाली पेजिनेशन (paginacao.md) के विपरीत, यहाँ आप dataset को नियंत्रित करते हैं और सूची केवल यह सूचित करती है कि अधिक लाने का समय कब है।
उपयोग की गई APIs
VirtualListView.onLoadMore(Runnable callback)— जब स्क्रॉल अंत के पास पहुँचता है तब ट्रिगर होता है। एक समय में केवल एक ट्रिगर लंबित रहता है (loadMorePending), जिससे दोहराई गई कॉल से बचा जाता है।VirtualListView.loadMoreThreshold(int threshold)— अंत से कितने आइटम पहले callback ट्रिगर होता है। Default5।VirtualListView.notifyDataChanged()— नए आइटम संलग्न करने के बाद इसे कॉल करना अनिवार्य है; यहloadMorePendingको साफ़ करता है, स्पिनर को छिपाता है और सामग्री को दोबारा मापता है।
पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
package com.exemplo;
import java.util.*; // List / ArrayList
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
{
final List<String> dados = new ArrayList<>();
int proxima = 0;
/** dataset में 30 आइटम का एक बैच जोड़ता है (सर्वर के एक पेज का अनुकरण)। */
private void carregarPagina()
{
for (int i = 0; i < 30; i++)
dados.add("Registro " + (proxima++));
}
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
carregarPagina(); // पहला बैच भरता है
VirtualListView lista = new VirtualListView(Relative.ofFont(3f), new VirtualListView.DataAdapter()
{
public int getCount() { return dados.size(); }
public Component createView() { return new Label(""); }
public void bindView(Component v, int i) throws Exception
{
((Label) v).setText(dados.get(i));
}
});
lista.loadMoreThreshold(8); // अंत से 8 आइटम पहले लाना शुरू करता है (डिफ़ॉल्ट 5 है)
lista.onLoadMore(() ->
{
// अंत के पास आने पर एक बार ट्रिगर होता है; अगले ट्रिगर केवल notifyDataChanged के बाद
onUI(() ->
{
carregarPagina(); // जोड़ता है (अंत में नए index)
lista.notifyDataChanged(); // अगले load-more को मुक्त करता है और spinner छुपाता है
});
});
add(LAY_FILL, lista);
}
}
नीचे का अंश केवल मुख्य भाग दिखाता है। इसे चलाने के लिए, इसे ऊपर दिए
MainWindowढाँचे में रखें।
न्यूनतम अंश
// स्रोत में सत्यापित: VirtualListView.java (onLoadMore / loadMoreThreshold / notifyDataChanged)
final Array<String> dados = new Array<>();
carregarPagina(dados, 0); // पहला बैच भरता है
VirtualListView lista = new VirtualListView(Relative.ofFont(3f), new VirtualListView.DataAdapter()
{
public int getCount() { return dados.size(); }
public Component createView() { return new Label(""); }
public void bindView(Component v, int i) throws Exception
{
((Label) v).setText(dados.get(i));
}
});
lista.loadMoreThreshold(8); // अंत से 8 आइटम पहले लाना शुरू करता है (डिफ़ॉल्ट 5 है)
lista.onLoadMore(() ->
{
// अंत के पास आने पर एक बार ट्रिगर होता है; अगले ट्रिगर केवल notifyDataChanged के बाद
api.proximaPagina(novos ->
{
dados.addAll(novos); // जोड़ता है (अंत में नए index)
lista.notifyDataChanged(); // अगले load-more को मुक्त करता है और spinner छुपाता है
});
});
layout.add(1f, lista);
और गहराई में जाएँ
VirtualListViewलोड-मोर के लंबित रहने के दौरान स्वचालित रूप से फुटर में एक स्पिनर दिखाता है (VirtualListViewStyle.showSpinnerद्वारा नियंत्रित)।- यदि आप
notifyDataChanged()को कॉल नहीं करते हैं, तोloadMorePendingtrueपर अटका रहता है और callback फिर कभी ट्रिगर नहीं होता। - सीमित कैश वाले हटाने-योग्य पृष्ठ चाहिए (अनंत append के बजाय)? उपयोग करें paginacao.md।
- विजेट गाइड: VirtualListView · सहोदर रेसिपी: lista-virtual-grande.md · आधिकारिक स्रोत: अध्याय 15
क्या यह पृष्ठ उपयोगी था?प्रतिक्रिया के लिए धन्यवाद!