【发布时间】:2021-01-11 17:54:50
【问题描述】:
我正在尝试在 xamarin.android 中制作一个 imagevideoslider,我遇到了一些运行时视图删除和更新问题,例如 findviewwithtag 返回 null 而不是视图没有被正确删除,因为在搜索互联网后,我从答案中得到了这个想法这个线程列出所有视图
dynamically add and remove view to viewpager
现在假设我有 1000 个列表/可观察的图像视图或视频视图或混合集合。这种方法的内存效率是多少?这是一种不好的做法吗?
例如 我有一个 java.lang.object 列表
private ObservableCollection<Java.Lang.Object> _views = new ObservableCollection<Java.Lang.Object>();
每次在列表中添加新的动态项时都会调用此代码
View view = new View(_context);
if (con.MediaType.ToLower().Contains(Common.TYPE_IMAGE))
//MediaType.Image
{
view = new ImageView(_context);
((Activity)_context).RunOnUiThread(() =>
{
SetScaleType(ref view, con.ScaleType);
try
{
//implement ifileprovider
((ImageView)view).SetImageURI(Uri.Parse(con.LocalPath));
}
catch (Exception ex)
{
}
});
}
_views.add(view);
实例化项目方法
public override Object InstantiateItem(ViewGroup container, int position)
{
try
{
((Activity)_context).RunOnUiThread(() =>
{
container.AddView((View)_views[position], 0);
if (position == 0)
{
OnPageSelected(0);
}
});
}
catch (Exception ex)
{
}
return _views[position];
}
销毁物品方法
public override void DestroyItem(ViewGroup container, int position,
Object @object)
{
try
{
((Activity)_context).RunOnUiThread(() =>
{
View view = (View)@object;
((ViewPager)container).RemoveView(view);
view = null;
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
});
}
catch (Exception ex)
{
}
}
再次!在代码中保留所有视图的列表然后引用该列表中的视图是一种不好的方法吗?
【问题讨论】:
-
我会说将所有这些数据(即您的记忆)保存在您的集合中是一种不好的做法,更好的做法是根据要求加载数据,例如 FB 和 Instagram 如何加载他们的视图。仅在需要它们并且不在插槽中时才在一起
标签: android list xamarin.android android-viewpager observablecollection