8

के साथ सूचीदृश्य स्क्रॉल के शीर्ष पर दृश्य बनाएं मेरे पास एक सूचीदृश्य है जो स्पष्ट रूप से स्क्रॉल करने योग्य है। सूचीदृश्य में कुछ फॉर्म प्रश्न हैं। एक बार जब उपयोगकर्ता फॉर्म सबमिट करता है तो हम सूचीदृश्य के शीर्ष पर एक स्टैम्प-जैसे दिखने वाले कस्टम व्यू डालते हैं (और उपयोगकर्ता को सवालों का जवाब देने से रोकते हैं, लेकिन इससे कोई फर्क नहीं पड़ता)।एंड्रॉइड: सूचीदृश्य

स्टाम्प सूचीदृश्य (स्क्रीन के शीर्ष के रूप में) के शीर्ष पर दिखाई देना चाहिए और सूचीदृश्य के समान गति पर स्क्रॉल करने योग्य होना चाहिए, यानी यह गायब होना चाहिए जब सूची दृश्य आइटम जो इसके नीचे शुरू में थे, शीर्ष पर गायब हो गए स्क्रॉल करते समय स्क्रीन का।

कोई विचार यह कैसे प्राप्त करें?

उत्तर

6

मैं एक समाधान मिल गया। यह सुनिश्चित नहीं है कि यह बहुत ही सुरुचिपूर्ण है, लेकिन यह काम करता है, इसलिए इसे तब तक छोड़ दिया जाएगा जब तक कि कोई बेहतर कुछ न हो।

जो दृश्य मैं सूची के साथ स्क्रॉल करना चाहता हूं वह एक कस्टम दृश्य है, जिसे सूची दृश्य के बारे में जानना है। इसलिए मैं इस पर एक setListView (ListView ListView) विधि को लागू:

private int scrollY; //1 
private Map<Integer, Integer> listViewItemHeights = new Hashtable<>(); 
public void setListView(final ListView listView) { 
    listView.setOnScrollListener(new OnScrollListener() { //2 
     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) {} //3 

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { //4 
      View c = listView.getChildAt(0); 
      if (c != null) { 
       int oldScrollY = scrollY; 
       scrollY = -c.getTop(); 

       listViewItemHeights.put(listView.getFirstVisiblePosition(), c.getHeight()); 
       for (int i = 0; i < listView.getFirstVisiblePosition(); ++i) { 
        if (listViewItemHeights.get(i) != null) 
         scrollY += listViewItemHeights.get(i); 
       } 
       scrollBy(0, scrollY - oldScrollY); 
      } 
     } 
    }); 
} 

टिप्पणी नंबर 1: यह एक चर दे मुझे वर्तमान पुस्तक स्थिति का ट्रैक रखने के लिए है।

टिप्पणी संख्या 2: इस इस मामले में लागू किया जा की जरूरत नहीं है: पुस्तक श्रोता पर एक नया की स्थापना मेरी कस्टम दृश्य पता है जब सूची

टिप्पणी .3 जाने के लिए।

टिप्पणी संख्या 4: यह वह जगह है जहां जादू होता है। अंत में ध्यान दें मैं स्क्रॉल वाई द्वारा अपने दृश्य को स्क्रॉल करता हूं - पुराना स्क्रॉल, मुझे पहले इस बिट से शुरू करने दें। oldScrollY रखा स्क्रॉल स्थिति है, स्क्रॉल वाई नया है। मुझे उनके बीच के अंतर से स्क्रॉल करने की जरूरत है। स्क्रॉलवाई की गणना कैसे की जाती है, मैं आपको यहां अपने उत्तर में संदर्भित करता हूं: Android getting exact scroll position in ListView, इस प्रकार सूची दृश्य में स्क्रॉल स्थिति की गणना की जाती है।

5

शीर्ष स्क्रीन के दृश्य के लिए आप headerview listview..so आप सूचीदृश्य रूप में एक ही स्क्रॉल है की headerlayout के रूप में इतना बाँध coustom लेआउट जोड़ सकते हैं ...

View headerview = ((LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.track_footer_view, null, false); 
    listview.addHeaderView(headerview); 
+0

हाय, आपके उत्तर के लिए धन्यवाद। मुझे 'मुद्रित' होने के लिए सूचीदृश्य में शीर्ष पंक्तियों की आवश्यकता है, इसलिए मैं उस दृश्य को शीर्षलेख में नहीं डाल सकता। – Maria

+0

आप दो कस्टम लेआउट बनाने और पहले पॉजिटॉन के लिए पहले लेआउट के लिए पहले लेआउट और दूसरे लेआउट के लिए बाध्य कर सकते हैं .. इसलिए आपको बेसडाप्टर –

+0

में बाध्य करने वाले सरणी में आवश्यक वैल्यू जोड़ना होगा। बात यह है कि मुझे जरूरी नहीं है स्टाम्प को पहली स्थिति के शीर्ष पर दिखाना चाहते हैं। पंक्तियों की ऊंचाई मेरी सूची में अलग हो सकती है और टिकट पहले तीन या उससे भी अधिक हो सकता है। – Maria

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