2016-09-15 11 views
9

का उपयोग कर एक टुकड़ा में चयनित मैं दृश्य पेज अंदर मेरे टुकड़े है, लेकिन मैं टैब selected.I मेरी FragmentPagerAdapter में GetItemPosition विधि में PositionNone लौटने की कोशिश की पर डेटा को फिर से लोड करना चाहते हैं, लेकिन यह काम नहीं करता है ।पुनः लोड डेटा दृश्य पेजर

मैंने चयनित टैब पर notifyDataSetChanged(); जोड़ने का प्रयास किया लेकिन यह nullpointer अपवाद फेंकता है। मैंने viewPager.setOffscreenPageLimit सेट करने का भी प्रयास किया, मैं लिंक ढूंढने में कामयाब रहा: Replace Fragment inside a ViewPager लेकिन यह जावा पर है। मैंने अधिकांश कोड को सी # में परिवर्तित करने में कामयाब रहा है लेकिन टिप्पणी कोड पर फंस गया है। मुझे यकीन नहीं है कि श्रोता को कैसे कॉल करें और कक्षा को तुरंत उसी समय कैसे करें? बहुत सारे प्रश्न हैं लेकिन दुर्भाग्यवश Xamarin एंड्रॉइड में से एक नहीं है।

मुझे xamarin एंड्रॉइड में ऐसा करने की आवश्यकता है। किसी भी प्रकार की सहायता सराहनीय होगी।

यह मेरा FragmentAdapter

public class TabsFragmentPagerAdapter : FragmentPagerAdapter 
{ 
    private readonly Android.Support.V4.App.Fragment[] fragments; 
    static readonly int NUM_ITEMS = 2; 
    private readonly Android.Support.V4.App.FragmentManager FragmentManager; 
    private Android.Support.V4.App.Fragment mFragmentAtPos0; 
    private readonly ICharSequence[] titles; 

    public TabsFragmentPagerAdapter(Android.Support.V4.App.FragmentManager fm, Android.Support.V4.App.Fragment[] fragments, ICharSequence[] titles) : base(fm) 
    { 
     this.fragments = fragments; 
     this.titles = titles; 

    } 
    public override int Count 
    { 
     get 
     { 
      return fragments.Length; 
     } 
    } 

    public override int GetItemPosition(Java.Lang.Object objectValue) 
    { 
     if (objectValue.GetType() == typeof(startJobFrag) && mFragmentAtPos0.GetType() == typeof(jobCaptureFrag)) 
     { 
      return PositionNone; 
     } 
     return PositionUnchanged; 
    } 


    public override ICharSequence GetPageTitleFormatted(int position) 
    { 
     return titles[position]; 
    } 


    public override Android.Support.V4.App.Fragment GetItem(int position) 
    { 
     if (position == 0) 
     { 
      if (mFragmentAtPos0 == null) 
      { 
       //not working 
      } 
      return mFragmentAtPos0; 
     } 
     else 
     { 
      return new jobCaptureFrag(); 
     } 
    } 

है यह मेरा Actvity

void FnInitTabLayout() 
    { 
     var fragments = new Android.Support.V4.App.Fragment[] 
     { 
new frag 1(), 
new frag 2(), 
new frag 3(), 
     }; 

     //Tab title array 
     var titles = CharSequence.ArrayFromStringArray(new[] { 
    "Page 1", 
    "Page 2", 
    "Page 3", 
    }); 

     var viewPager = FindViewById<ViewPager>(Resource.Id.viewpager); 
     //viewpager holding fragment array and tab title text 
     //viewPager. 
     viewPager.Adapter = new TabsFragmentPagerAdapter(SupportFragmentManager, fragments, titles); 

     // Give the TabLayout the ViewPager 
     tabLayout.SetupWithViewPager(viewPager); 

     viewPager.PageSelected += (object sender, ViewPager.PageSelectedEventArgs e) => 
     { 
      //FnInitTabLayout(); 
      if(e.Position == 0) 
      { 
       //handle tab click/selected 

      } 
     }; 
} 

public interface FirstPageFragmentListener 
{ 
    void onSwitchToNextFragment(); 
} 

टुकड़ा

public class Fragment1: Android.Support.V4.App.Fragment 
{   
    public override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 

     // Create your fragment here 
    } 

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     // Use this to return your custom view for this Fragment 
     // return inflater.Inflate(Resource.Layout.YourFragment, container, false); 

     View view = inflater.Inflate(Resource.Layout.myview, container, false); 

    } 
} 
+2

xamairn के बारे में नहीं पता लेकिन पेज को देखने का प्रयास करें .setOffscreenPageLimit (0) –

+0

संकेत: अपने टुकड़े के अंदर, जांच करें कि यह दृश्यमान है या नहीं। यदि ऐसा है, तो डेटा लोड करने के लिए कॉल करें। – anstaendig

+0

@anstaendig मैंने डेटा लोड करने का प्रयास किया लेकिन शून्य अपवाद –

उत्तर

6

मैं अपने दम पर इसे हल करने में कामयाब रहे है। मेरे गतिविधि में मैं Pageselected घटना पर NotifyDataSetChanged() बुलाया

गतिविधि

ViewPager.PageSelected += (object sender,     ViewPager.PageSelectedEventArgs e) => 
     { 
      if (e.Position == 1) 
      { 
       _pager.Adapter.NotifyDataSetChanged(); 
      } 
     }; 

तब मैं FragmentStatePagerAdapter करने के लिए FragmentPagerAdapter से मेरी एडाप्टर बदल गया है और GetItemPosition ओवरराइड।

एडाप्टर

public class TabsFragmentPagerAdapter : FragmentStatePagerAdapter 
    { 
     public override int GetItemPosition(Java.Lang.Object objectValue) 
     { 
      return PositionNone; 
     } 
    } 

कोई विशिष्ट टैब ताज़ा - एडाप्टर

public override Android.Support.V4.App.Fragment GetItem(int position) 
    { 
     if(position == 1) //second tab selected 
     { 
      NotifyDataSetChanged(); 
     }    
     return fragments[position]; 
    } 

मैं वहाँ यह करने के लिए एक बेहतर तरीका है, लेकिन यह काम करता है यकीन है कि अंदर।

+0

क्या केवल एक टुकड़ा ताज़ा करने का कोई तरीका है और पूरे व्यूअरजर नहीं? – CDrosos

+0

@CDrosos मैंने अपना जवाब अपडेट किया है। इसकी जांच - पड़ताल करें। –

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