2016-08-31 15 views
0

私はちょうどPagerAdapterを使ってViewPagerを作成しました.3つの項目を入れましたが、プログラムを実行するとViewPager.ChildCountは2を与えますか? と私が2番目にスクロールするときアダプタは3番目のアイテムを追加して3カウントを与えますが、最後のビュー(3)にスクロールするとカウントが2になりますが、今回は最後の2アイテムです!私のコードで 私はレイアウト内のtextViewの位置を表示しようとしています それは最初のスクロールで私の右の番号を与え、ランダムにミックス位置を開始します 私はなぜ知っているのですか?私はXamarin を使用していますし、私のコードAndroid ViewPager.ChildCountは私に間違ったカウントを与えます

public class SlidingTabsFragment : Fragment 
    { 
     private SlidingTabScrollView mSlidingTabScrollView; 
     private ViewPager mViewPager; 
     protected static View CurrentView; 
     protected static int CurrentViewPosition; 

     public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
     { 
      return inflater.Inflate(Resource.Layout.fragment_sample, container, false); 
     } 

     public override void OnViewCreated(View view, Bundle savedInstanceState) 
     { 
      mSlidingTabScrollView = view.FindViewById<SlidingTabScrollView>(Resource.Id.sliding_tabs); 
      mViewPager = view.FindViewById<ViewPager>(Resource.Id.viewpager); 
      mViewPager.Adapter = new SamplePagerAdapter(); 
      mViewPager.PageSelected += MViewPager_PageSelected; 
      mViewPager.PageScrolled += MViewPager_PageScrolled; 
      mSlidingTabScrollView.ViewPager = mViewPager; 

     } 

     private void MViewPager_PageScrolled(object sender, ViewPager.PageScrolledEventArgs e) 
     { 
      if (e.Position < mViewPager.ChildCount && e.Position>=0) 
      { 
       SamplePagerAdapter ad = (SamplePagerAdapter)mViewPager.Adapter; 
       TextView txtTitle = mViewPager.GetChildAt(e.Position).FindViewById<TextView>(Resource.Id.item_title); 

       int pos = ad.GetItemPosition(CurrentView); 
       txtTitle.Text = e.Position.ToString(); 
      } 

     } 

     private void MViewPager_PageSelected(object sender, ViewPager.PageSelectedEventArgs e) 
     { 
      if (e.Position < mViewPager.ChildCount && e.Position >= 0) 
      { 
       SamplePagerAdapter ad = (SamplePagerAdapter)mViewPager.Adapter; 


       TextView txtTitle = mViewPager.GetChildAt(e.Position).FindViewById<TextView>(Resource.Id.item_title); 

       txtTitle.Text = e.Position.ToString(); 
      } 
     } 


     public class SamplePagerAdapter : PagerAdapter 
     { 
      List<string> items = new List<string>(); 
      public override void SetPrimaryItem(ViewGroup container, int position, Java.Lang.Object obj) 
      { 
       CurrentView = (View)obj; 
       CurrentViewPosition = position; 
      } 
      public SamplePagerAdapter() : base() 
      { 
       items.Add("Home"); 
       items.Add("Sell"); 
       items.Add("Rent"); 
      } 

      public override int Count 
      { 
       get { return items.Count; } 
      } 

      public override bool IsViewFromObject(View view, Java.Lang.Object obj) 
      { 
       return view == obj; 
      } 

      public override Java.Lang.Object InstantiateItem(ViewGroup container, int position) 
      { 
       View view = LayoutInflater.From(container.Context).Inflate(Resource.Layout.pager_item, container, false); 
       container.AddView(view); 


       return view; 
      } 

      public string GetHeaderTitle (int position) 
      { 
       return items[position]; 
      } 

      public override void DestroyItem(ViewGroup container, int position, Java.Lang.Object obj) 
      { 
       container.RemoveView((View)obj); 
      } 
     } 

答えて

0

が、私はそれを解決があり、私はプロパティ

をOffScreenLimit設定する必要がありますので、それがあった

を助けてください

関連する問題