मुख्य सामग्री पर जाएँ
CrossFly 100% ओपन सोर्सGitHub पर फ़ॉलो करें
CrossFlyCrossFly
शुरू करें

यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।

लोड-मोर (अनंत स्क्रॉल) कैसे लागू करें

उद्देश्य. जैसे-जैसे उपयोगकर्ता सूची के अंत के पास पहुँचता है, स्वचालित रूप से अधिक डेटा लोड करें, मौजूदा dataset में आइटम संलग्न करते हुए (append)। LRU कैश वाली पेजिनेशन (paginacao.md) के विपरीत, यहाँ आप dataset को नियंत्रित करते हैं और सूची केवल यह सूचित करती है कि अधिक लाने का समय कब है।

उपयोग की गई APIs

  • VirtualListView.onLoadMore(Runnable callback) — जब स्क्रॉल अंत के पास पहुँचता है तब ट्रिगर होता है। एक समय में केवल एक ट्रिगर लंबित रहता है (loadMorePending), जिससे दोहराई गई कॉल से बचा जाता है।
  • VirtualListView.loadMoreThreshold(int threshold) — अंत से कितने आइटम पहले callback ट्रिगर होता है। Default 5।
  • 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() को कॉल नहीं करते हैं, तो loadMorePending true पर अटका रहता है और callback फिर कभी ट्रिगर नहीं होता।
  • सीमित कैश वाले हटाने-योग्य पृष्ठ चाहिए (अनंत append के बजाय)? उपयोग करें paginacao.md।
  • विजेट गाइड: VirtualListView · सहोदर रेसिपी: lista-virtual-grande.md · आधिकारिक स्रोत: अध्याय 15
क्या यह पृष्ठ उपयोगी था?