使用 ViewPager 的 ImageSlider 不显示在 destroyitem 中被删除的图像
ImageSlider using ViewPager not showing image which gets removed in destroyitem
我正在尝试使用 viewpager 制作混合 image/video 滑块,
我为此制作了一个适配器,在 pagerAdapter 覆盖的 instantiateItem 中,我将视图分配给 imageView 或 videoView.
下面是那个
的代码
public override Java.Lang.Object InstantiateItem(ViewGroup container, int position)
{
View view = new View(_context);
var plItem = this._viewSources[position];
try
{
if (!plItem.Contains("mp4"))
{
view = new ImageView(_context);
view.Tag = position;
((ImageView)view).SetImageURI(Uri.Parse(plItem));
((ImageView)view).SetScaleType(ImageView.ScaleType.FitXy);
}
else
{
view = new VideoView(_context);
view.Tag = position;
RelativeLayout.LayoutParams layoutparams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MatchParent, RelativeLayout.LayoutParams.MatchParent);
((VideoView)view).LayoutParameters = layoutparams;
((VideoView)view).SetVideoPath(plItem);
((VideoView)view).Completion += View_Completion;
((VideoView)view).Start();
}
((ViewPager)container).AddView(view, 0);
}
catch (Exception ex)
{
}
return view;
//((Activity)_context).RunOnUiThread(() =>
//{
// container.AddView(view, 0);
//});
//return view;
}
并且我还覆盖了 destroyItem,在其中我从容器中删除了视图
public override void DestroyItem(ViewGroup container, int position, Java.Lang.Object @object)
{
try
{
((ViewPager)container).RemoveView((View)@object);
//GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
}
catch (Exception ex)
{
}
}
我正在使用此代码在另一个自定义控件中调用我的 viewpager
_viewPager = new ViewPager(_context);
_viewPager.OffscreenPageLimit = 2;
_viewPager.SetBackgroundColor(Android.Graphics.Color.Transparent);
_viewPager.Adapter = new ImageVideoSliderAdapter(_context, _viewPager);
_viewPager.AddOnPageChangeListener((IOnPageChangeListener)_viewPager.Adapter);
我面临的主要问题是当一个项目从容器中移除时,它在该迭代中显示一个没有图像的空图像视图
问题出在销毁项目上,它抛出异常,只有我必须删除 ui 线程中的视图,这就是它没有被正确删除的原因。
((Activity)_context).RunOnUiThread(() =>
{
((ViewPager)container).RemoveView((View)@object);
});
这样做之后问题就解决了。
我正在尝试使用 viewpager 制作混合 image/video 滑块, 我为此制作了一个适配器,在 pagerAdapter 覆盖的 instantiateItem 中,我将视图分配给 imageView 或 videoView.
下面是那个
的代码 public override Java.Lang.Object InstantiateItem(ViewGroup container, int position)
{
View view = new View(_context);
var plItem = this._viewSources[position];
try
{
if (!plItem.Contains("mp4"))
{
view = new ImageView(_context);
view.Tag = position;
((ImageView)view).SetImageURI(Uri.Parse(plItem));
((ImageView)view).SetScaleType(ImageView.ScaleType.FitXy);
}
else
{
view = new VideoView(_context);
view.Tag = position;
RelativeLayout.LayoutParams layoutparams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MatchParent, RelativeLayout.LayoutParams.MatchParent);
((VideoView)view).LayoutParameters = layoutparams;
((VideoView)view).SetVideoPath(plItem);
((VideoView)view).Completion += View_Completion;
((VideoView)view).Start();
}
((ViewPager)container).AddView(view, 0);
}
catch (Exception ex)
{
}
return view;
//((Activity)_context).RunOnUiThread(() =>
//{
// container.AddView(view, 0);
//});
//return view;
}
并且我还覆盖了 destroyItem,在其中我从容器中删除了视图
public override void DestroyItem(ViewGroup container, int position, Java.Lang.Object @object)
{
try
{
((ViewPager)container).RemoveView((View)@object);
//GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
}
catch (Exception ex)
{
}
}
我正在使用此代码在另一个自定义控件中调用我的 viewpager
_viewPager = new ViewPager(_context);
_viewPager.OffscreenPageLimit = 2;
_viewPager.SetBackgroundColor(Android.Graphics.Color.Transparent);
_viewPager.Adapter = new ImageVideoSliderAdapter(_context, _viewPager);
_viewPager.AddOnPageChangeListener((IOnPageChangeListener)_viewPager.Adapter);
我面临的主要问题是当一个项目从容器中移除时,它在该迭代中显示一个没有图像的空图像视图
问题出在销毁项目上,它抛出异常,只有我必须删除 ui 线程中的视图,这就是它没有被正确删除的原因。
((Activity)_context).RunOnUiThread(() =>
{
((ViewPager)container).RemoveView((View)@object);
});
这样做之后问题就解决了。