Android 列表项重用
Android list item reuse
我需要在文本更改时闪烁的 TextView - 所以我制作了 CustomTextView,如 here 中所述。它工作得很好,但是当我在列表项中设置 CustomTextView 时遇到问题。由于 ListView 项目被重复使用,我的 CustomTextView 在滚动时一直闪烁 up/down 因为它的上下文发生了变化,现在它 'points' 到另一个列表项目。
问题是我不知道如何确定项目的上下文何时更改,所以我无法放置 noFlash 标志(CustomTextView 的文本 属性 未设置为 null,因此我无法使用它要么)
最后我不得不使用 BindBindbleCode 中的一些代码制作自定义适配器
protected override void BindBindableView(object source, IMvxListItemView viewToUse)
{
var newValue = source as ListItemVM;
var oldValue = viewToUse.DataContext as ListItemVM;
if (newValue.ItemID != oldValue.ItemID)
newValue.Rebinded = true;
base.BindBindableView(source, viewToUse);
}
然后我在 CustomTextView 上添加了 NotLoaded 属性 并将这两个绑定在一起。因此,当 Rebinded 为 true 时,它将 NotLoaded 设置为 true,表示未加载该 TextView 中的数据。如果未加载数据,则无需刷新 CustomTextView 的背景。
public string AnimatingText
{
get { return Text; }
set
{
if (Text == value)
return;
if (NotLoaded)
{
Text = value;
NotLoaded = false;
return;
}
Text = value;
// Do your animation here
}
}
我需要在文本更改时闪烁的 TextView - 所以我制作了 CustomTextView,如 here 中所述。它工作得很好,但是当我在列表项中设置 CustomTextView 时遇到问题。由于 ListView 项目被重复使用,我的 CustomTextView 在滚动时一直闪烁 up/down 因为它的上下文发生了变化,现在它 'points' 到另一个列表项目。
问题是我不知道如何确定项目的上下文何时更改,所以我无法放置 noFlash 标志(CustomTextView 的文本 属性 未设置为 null,因此我无法使用它要么)
最后我不得不使用 BindBindbleCode 中的一些代码制作自定义适配器
protected override void BindBindableView(object source, IMvxListItemView viewToUse)
{
var newValue = source as ListItemVM;
var oldValue = viewToUse.DataContext as ListItemVM;
if (newValue.ItemID != oldValue.ItemID)
newValue.Rebinded = true;
base.BindBindableView(source, viewToUse);
}
然后我在 CustomTextView 上添加了 NotLoaded 属性 并将这两个绑定在一起。因此,当 Rebinded 为 true 时,它将 NotLoaded 设置为 true,表示未加载该 TextView 中的数据。如果未加载数据,则无需刷新 CustomTextView 的背景。
public string AnimatingText
{
get { return Text; }
set
{
if (Text == value)
return;
if (NotLoaded)
{
Text = value;
NotLoaded = false;
return;
}
Text = value;
// Do your animation here
}
}