Android: viewpage.ChildCount给我错误的计数
本文关键字:错误 viewpage ChildCount Android | 更新日期: 2023-09-27 18:05:04
我刚刚创建了ViewPager与PagerAdapter,我把它里面3个项目,但当我运行程序ViewPager。ChildCount给我2个?当我滚动到第二个视图时,适配器添加第三个项目并给我3个计数,但当我滚动到最后一个视图(3)时,它给我2个计数,但此时最后2个项目!!在我的代码中,我试图在布局内的textView中显示位置它在第一次滚动中给我正确的数字,然后它开始随机混合位置我不知道为什么??请帮助
我正在使用Xamarin这是我的代码
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);
}
}
我解决了这个问题,这是因为我必须设置OffScreenLimit属性