2016-04-21 11 views
7

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

उत्तर

11

इसलिए मैंने इसे स्वयं हल कर लिया है। मेरा समाधान ListView को उपclass करना था और एक सार्वजनिक स्क्रॉलटॉप विधि जोड़ें जो कॉल किए जाने पर एक आंतरिक ScrollToTopRequestedEvent को आमंत्रित करता है। इसके बाद मैंने प्रत्येक प्लेटफार्म पर ListViewRenderer को उपclassed और घटना के लिए पंजीकृत किया।

एंड्रॉइड रेंडरर में मैं फिर शीर्ष पर स्क्रॉल करने के लिए Control.SmoothScrollToPositionFromTop (0, 0) को कॉल कर रहा हूं।

आईओएस में प्रस्तुत किया गया मैं कंट्रोल.ScrollRectToVisible (नया CoreGraphics.CGRect (0, 0, 1, 1), सत्य कह रहा हूं)।

+0

धन्यवाद गैरेथ जो मुझे सही रास्ते पर रखता है! मैं एक घटना के बजाय एक क्रिया का उपयोग कर समाप्त हुआ, लेकिन यह पूरी तरह से काम करता है;) – wislon

+0

क्या आप कोड प्रदान कर सकते हैं? मैं Xamarin में एंड्रॉइड डेवलपर और नौसिखिया हूँ :) – AlirezaXX

+0

@AlirezaXX कृपया –

2

वाह सभी क्रेडिट @ गैरेथ वाईन, वह आदमी जो ठंडा थाक्स था। वैसे भी यहां हर किसी का उपयोग करने के लिए कोड, परिवर्तन वर्ग के नाम और नाम स्थान, IOS शामिल नहीं है, Android के लिए सिर्फ समानांतर जवाब में गैरेथ व्यान के संकेत का उपयोग कर के रूप में ही कार्य करें:

साझा NiftyListView.cs:

 using System; 
     using Xamarin.Forms; 

      namespace AppoMobi 
      { 
       public class NiftyListView : CListView 
       { 
        public event EventHandler EventScrollToTop; 

        //------------------------------------------------------------------- 
        public void ScrollToTop(bool animate=true) 
        //------------------------------------------------------------------- 
        { 
         //bool animate is not used at this stage, it's always animated. 
         EventScrollToTop?.Invoke(this, EventArgs.Empty); 
        } 
       } 
      } 

Android के NiftyListView.Android.cs :

using System; 
using AppoMobi; 
using AppoMobi.Droid.Renderers; 
using Xamarin.Forms; 
using Xamarin.Forms.Platform.Android; 
using ListView = Xamarin.Forms.ListView; 

[assembly: ExportRenderer(typeof(NiftyListView), typeof(NiftyListViewRenderer))] 
namespace AppoMobi.Droid.Renderers 
{ 
    //------------------------------------------------------------------- 
    class NiftyListViewRenderer : ListViewRenderer 
    //------------------------------------------------------------------- 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<ListView> e) 
     { 
      base.OnElementChanged(e); 

      var view = (NiftyListView)Element; 
      if (view == null) return; 

      view.EventScrollToTop += OnScrollToTop; 

     } 

     //------------------------------------------------------------------------------------------- 
     public async void OnScrollToTop(object sender, EventArgs eventArgs) 
     //------------------------------------------------------------------------------------------- 
     { 
      Control.SmoothScrollToPositionFromTop(0, 0); 
     } 

    } 
} 
+0

से नीचे मेरे उत्तर में कोड की जांच करें अरे, यह बहुत अच्छा है कि आपने कोड साझा किया। स्मृति से, मुझे लगता है कि बड़ी संख्या में वस्तुओं के साथ सूचियों के लिए SmoothScroll काफी धीमी है। मैंने इसे किसी अन्य विधि के लिए बदल दिया लेकिन मुझे याद नहीं आया कि यह क्या था। मैं देखूंगा कि क्या मैं अपना कोड खोद सकता हूं और उसे भी पोस्ट कर सकता हूं। –

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