2012-05-22 20 views
13

मैं कुछ सामान करना चाहता हूं। मैं ListView में आलसी लोडिंग करना चाहता हूं। मेरे ListView में 10,000 से अधिक डेटा & केवल TextView में हैं। इसलिए जब मैं सूची गतिविधि लॉन्च करता हूं तो मैं पहली बार उस डेटा को लोड नहीं कर सकता। यह कुशल नहीं है इसलिए मैं सूची में पहले 20 या 30 आइटम लोड कर सकता हूं। ListView की पंक्तियों को लोड करते समय लोड किया जाता है। इसलिए जब मैं पिछले सूचकांक पर ListView की अंतिम अनुक्रमणिका तक पहुंचता हूं, तो मैं प्रोग्रेसबार डालूंगा, यह ध्यान देगा कि नया डेटा लोड हो गया है, इसलिए उस समय नया डेटा अंतिम + 1 इंडेक्स के साथ लोड होगा। मैं यह कैसे कर सकता हूँ?एंड्रॉइड सूचीदृश्य आलसी लोडिंग

+1

आप दिखा सकते हैं कि तुम क्या करने की कोशिश की है? – gideon

+0

या मैंने उदाहरण के रूप में यहां छवि जोड़ा है .. इसे एक चेक करें – Jai

+0

पिकासो के बारे में कैसे? क्या यह आपकी ज़रूरत को पूरा करता है? http://square.github.io/picasso/ – phi

उत्तर

19

आप अंतहीन एडाप्टर कार्यान्वयन का उपयोग करके इसे प्राप्त कर सकते हैं। यह वही करता है जो आप चाहते हैं। आप प्रति स्क्रॉल को रीफ्रेश करने के लिए पंक्तियों की संख्या को भी सीमित कर सकते हैं। यहाँ यह करने के लिए एक लिंक

Android: Implementing progressbar and "loading..." for Endless List like Android Market

https://github.com/commonsguy/cwac-endless

इसके इस्तेमाल के लिये आप कैसे असीमता संभाल करने के बारे में जानकारी प्रदान करने के लिए EndlessAdapter का विस्तार है।,। विशेष रूप से, आपको अपने वास्तविक एडाप्टर में किसी भी पंक्ति से स्वतंत्र पंक्ति दृश्य प्रदान करने में सक्षम होना चाहिए, जो किसी अन्य विधि में, आपके मुख्य एडाप्टर में वास्तविक डेटा में लोड करते समय प्लेसहोल्डर के रूप में कार्य करेगा। फिर, आपसे थोड़ी मदद के साथ, यह नए डेटा में निर्बाध रूप से संक्रमण करता है।

+0

धन्यवाद दोस्त, मुझे इसे आजमाएं। – Jai

+1

लिंक अब टूट गया है! :( –

0

// बुला समारोह में डाल:

@Override 
public View onCreateView(android.view.LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    ScrollListener scrollListener = new ScrollListener(); 
    listView.setOnScrollListener(scrollListener); 
} 

और भीतरी वर्ग:

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) 
    { 

    } 

} 
0

अपने सूचियां स्क्रॉल बनाने के लिए तेजी से: -

  1. इस्तेमाल किया की स्थिति की संख्या कम अपने एडाप्टर के getView में।
  2. कचरा संग्रहण चेतावनी है कि आप लॉग
  3. पुस्तक जोड़ें समारोह में मिलता है की संख्या (पंक्तियों को प्रति स्क्रॉल ताज़ा करने की संख्या को सीमित)
1

ListView के लिए एक onScrollListener जोड़े को कम करें। जब उपयोगकर्ता स्क्रॉल करता है, तो जांच करें कि ListView इसके अंत के करीब है या नहीं। यदि हां, तो अधिक डेटा प्राप्त करें। एक उदाहरण के रूप:

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); 
} 

गतिविधि:

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 !!! 
       } 
      }); 
     } 
    } 

आप पा सकते हैं पूरा कार्यान्वयन at this link

संबंधित मुद्दे