Nativescript:滚动时重复使用Listview项目

时间:2018-05-29 06:08:37

标签: javascript xml nativescript

我正在尝试通过点击商店[<Label>]将商品添加到购物车。然后,我正在为添加的列表更改标签的颜色。

之后,我试图通过滚动添加更多产品。自动更改了其他ListView列表的标签颜色。

我知道这些行为会发生在UITableView的{​​{1}}中。在iOS的帮助下,我可以处理这个问题。 Tableview Reusing in iOS

我不知道如何在NSDictionary

中处理此问题

编码

的.js

NativeScript

.XML

exports.cartColorChange = function(args) {
    var lbl = args.object;
    lbl.color = "rgb(171, 0, 230)";
};

的CSS

<ListView col="0" row="2" items="{{ mySecondItems }}" id="myListVw" itemLoading="listViewItemsLoading" itemTap="secondListViewItemTap" class="list-group" separatorColor="transparent">
<ListView.itemTemplate>

<GridLayout class="listGrid" columns="75,*" rows="*" width="100%" height="90" >
  <Label col="0" row="0" class="roundCircle" text="{{ price }}" textWrap="true"  />

  <StackLayout col="1" row="0" orientation="vertical" verticalAlignment="center">
       <Label class="booksubtitle" text="{{ subtitle }}" textWrap="true" id="wow"  />
       <Label class="bookTitle" text="{{ title }}" textWrap="true"  />
       <Label class="addCart" text="&#xf291;" textWrap="true" tap="cartColorChange" />

  </StackLayout>
</GridLayout>
</ListView.itemTemplate>
</ListView>

输出:

enter image description here

2 个答案:

答案 0 :(得分:1)

您正在直接更改渲染对象的颜色,因为当对象被回收时,它会保留该颜色。

单击时更改对象属性可以达到相同的效果。并基于该属性应用样式。例如className="{{isClicked?'clickedCart':'notClickedCart'}}"stle.color="{{isClicked?'red':'blue'}}"

这里是更新的游乐场演示:https://play.nativescript.org/?template=play-js&id=T6sna8&v=8

<强>编码

<强>的.js

exports.cartColorChange = function(args) {
    var lbl = args.object;
    var item=lbl.bindingContext;
    var index = secondArray.indexOf(item)
    console.log("Clicked item with index " + index);
    item.isClicked = !item.isClicked;
    secondArray.setItem(index,item);
    // lbl.color = "rgb(171, 0, 230)";
};

<强> .XML

<ListView col="0" row="2" items="{{ mySecondItems }}" id="myListVw" itemLoading="listViewItemsLoading" itemTap="secondListViewItemTap" class="list-group" separatorColor="transparent">
<ListView.itemTemplate>

<GridLayout class="listGrid" columns="75,*" rows="*" width="100%" height="90" >
  <Label col="0" row="0" class="roundCircle" text="{{ price }}" textWrap="true"  />

  <StackLayout col="1" row="0" orientation="vertical" verticalAlignment="center">
       <Label class="booksubtitle" text="{{ subtitle }}" textWrap="true" id="wow"  />
       <Label class="bookTitle" text="{{ title }}" textWrap="true"  />
       <Label class="addCart" className="{{isClicked?'clickedCart':'notClickedCart'}}" text="&#xf291;" textWrap="true" tap="cartColorChange" />

  </StackLayout>
</GridLayout>
</ListView.itemTemplate>
</ListView>

<强>的CSS

Label.clickedCart{
    color:rgb(171, 0, 230);
}

Label.notClickedCart{
    color:gray;
}

答案 1 :(得分:0)

是的,listview项目确实被重用,以节省内存。

Here您可以找到用于保存问题的方法,其中包括将listview项绑定到模型中的某个属性。