【问题标题】:ImageSlider using ViewPager not showing image which gets removed in destroyitem使用 ViewPager 的 ImageSlider 未显示在 destroyitem 中删除的图像
【发布时间】:2020-10-28 10:02:53
【问题描述】:

我正在尝试使用 viewpager 制作混合图像/视频滑块, 我为此制作了一个适配器,并在由 pagerAdapter 覆盖的实例化项中,我将视图分配给 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);

我面临的主要问题是,当从容器中删除一个项目时,它会在该迭代中显示一个没有图像的空图像视图

【问题讨论】:

    标签: android xamarin.android android-viewpager androidimageslider


    【解决方案1】:

    问题出在销毁项目上,它抛出异常,只有我必须删除 ui 线程中的视图,这就是它没有被正确删除的原因。

                ((Activity)_context).RunOnUiThread(() =>
                {
                    ((ViewPager)container).RemoveView((View)@object);
                });
    

    执行此操作后,问题得到解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多