मैं एक समाधान मिल गया। यह सुनिश्चित नहीं है कि यह बहुत ही सुरुचिपूर्ण है, लेकिन यह काम करता है, इसलिए इसे तब तक छोड़ दिया जाएगा जब तक कि कोई बेहतर कुछ न हो।
जो दृश्य मैं सूची के साथ स्क्रॉल करना चाहता हूं वह एक कस्टम दृश्य है, जिसे सूची दृश्य के बारे में जानना है। इसलिए मैं इस पर एक 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, इस प्रकार सूची दृश्य में स्क्रॉल स्थिति की गणना की जाती है।
हाय, आपके उत्तर के लिए धन्यवाद। मुझे 'मुद्रित' होने के लिए सूचीदृश्य में शीर्ष पंक्तियों की आवश्यकता है, इसलिए मैं उस दृश्य को शीर्षलेख में नहीं डाल सकता। – Maria
आप दो कस्टम लेआउट बनाने और पहले पॉजिटॉन के लिए पहले लेआउट के लिए पहले लेआउट और दूसरे लेआउट के लिए बाध्य कर सकते हैं .. इसलिए आपको बेसडाप्टर –
में बाध्य करने वाले सरणी में आवश्यक वैल्यू जोड़ना होगा। बात यह है कि मुझे जरूरी नहीं है स्टाम्प को पहली स्थिति के शीर्ष पर दिखाना चाहते हैं। पंक्तियों की ऊंचाई मेरी सूची में अलग हो सकती है और टिकट पहले तीन या उससे भी अधिक हो सकता है। – Maria