1

テーブルビュー行を作成しました。ここでは、各行に 1 つのラベルと 2 つの画像ビューがあるテーブルビューがあります。画像をクリックすると、ラベル値の選択された行で何かを変更する必要があります。

しかし、画像をクリックしている場合、私のコードから、ラベルの値は最後のアイテムから変更されます。私のコードで何が問題なのですか。

for( var i=0; i<data.length; i++){ 
    var row = Ti.UI.createTableViewRow({
    layout : 'horizontal',
    width: "100%",
    height: Ti.UI.SIZE,
});
row.add(Ti.UI.createImageView({
    image: data[i].image,
    top: 5,
    width: '50',
    height: Ti.UI.SIZE,
}));
row.add(Ti.UI.createLabel({
    text: data[i].name,
    top: 5,
    width: 180,
    color: '#040404',
    height: Ti.UI.SIZE,
}));

var deleteitem = Ti.UI.createImageView({
    image: "images/back.png",
    top: 5,
    i:i,
    squantity : data[i].itemCount,
    spprice :data[i].itemPrice,
    width: Ti.UI.SIZE,
    height: Ti.UI.SIZE,
    myrow: row,
});
row.add(deleteitem);
var adddeleteitemview = Ti.UI.createView({
    width: Ti.UI.SIZE,
    height: Ti.UI.SIZE,
    layout : 'horizontal',
    left:10,
    borderColor:"gray",
    borderRadius:"10"
});
var removeitem = Ti.UI.createImageView({
    image: "images/minus.jpg",
    top: 5,
    width: Ti.UI.SIZE,
    squantity : data[i].itemCount,
    spprice :data[i].itemPrice,
    height: Ti.UI.SIZE,
});
adddeleteitemview.add(removeitem);
var itemcounttext = Ti.UI.createLabel({
    top: 5,
    text:data[i].itemCount,
    width: Ti.UI.SIZE,
    height: Ti.UI.SIZE,
});
adddeleteitemview.add(itemcounttext);
removeitem.addEventListener('click', function(e) {
    squantity = e.source.squantity;
    spprice = e.source.spprice;
    totalqty = Number(totalqty) - Number(1);
    $.ViewCartItemslist_header_cart.text = totalqty;
    totalamount = Number(totalamount) - Number((spprice));
    squantity = Number(squantity) - 1;
    itemcounttext.text=squantity;
    $.ViewCartItemslist_total_value.text = totalamount;
});

var additem = Ti.UI.createImageView({
    image: "images/plus.jpg",
    top: 5,
    width: Ti.UI.SIZE,
    squantity : data[i].itemCount,
    spprice :data[i].itemPrice,
    height: Ti.UI.SIZE,
});
    adddeleteitemview.add(additem);
    additem.addEventListener('click', function(e) {
        squantity = e.source.squantity;
        spprice = e.source.spprice;
        totalqty = Number(totalqty) + Number(1);
        $.ViewCartItemslist_header_cart.text = totalqty;
        totalamount = Number(totalamount) + Number((spprice));
        squantity = Number(squantity) + 1;
        itemcounttext.text=squantity;
        $.ViewCartItemslist_total_value.text = totalamount;
    });
    row.add(adddeleteitemview); 

    dataArray.push(row);
    row.addEventListener('click', function() {});
    deleteitem.addEventListener('click', function(e) {
        squantity = e.source.squantity;
        spprice = e.source.spprice;
        $.ViewCartItemstableView.deleteRow(e.source.myrow);
        totalqty = Number(totalqty) - Number(squantity);
        $.ViewCartItemslist_header_cart.text = totalqty;
        totalamount = Number(totalamount) - Number((spprice * squantity));
        $.ViewCartItemslist_total_value.text = totalamount;
    });   
};
$.ViewCartItemstableView.setData(dataArray);
}

編集:

トニーの回答から、少し改善されています。

removeitem.addEventListener("click",function(e){
var item=e.source;
item.getParent(); 
Ti.API.info("parent"+item.getParent());
 });

ここで次のような結果が得られます:

親[オブジェクトTiUIView]

のテキストを変更する方法

 var itemcounttext = Ti.UI.createLabel({
        top: 5,
        text:data[i].itemCount,
        width: Ti.UI.SIZE,
        height: Ti.UI.SIZE,
    });

このラベル ID 値を取得するにはどうすればよいですか? imageview onclick イベントリスナー ((ie,)removeitem.addEventListener("click",function(e){) で結果を変更する必要があります。

誰かが知っていれば、実装のアイデアを教えてください

編集:

トニーコメントより、

IOS ではうまく機能していますが、Android の実装では機能しません。

アラート (item.children[1].getText());

ここでは、正しい更新された値でアラートを取得していますが、ラベルには表示されていません。Androidでこの問題を解決するアイデアを教えてください。

4

1 に答える 1

1

テーブルビューにクリックイベントを追加してから、この方法でテーブルビュー行の子にアクセスできます

    s_f_table.addEventListener("click", function(e) {
    var l = e.row.children[0];

    if (l.getColor() == '#919191') {
        l.applyProperties({
            backgroundColor : o_color,
            color : "white"
        });
    } else {
        l.applyProperties({
            backgroundColor : "white",
            color : "#919191"
        });
    }

});

ここで私のコードでは、テーブルビュー行の最初の子はラベルであるため、それらの順序がわかっている場合は、テーブルビュー行の子にアクセスできます

別の方法で、画像ビューにイベントを追加したい場合は、次のようなものを追加できます

anImageView.addEventListener("click",function(e){
    var item=e.source;
    item.getParent();//so now you are in the table row 
    // so you can access any child and modify it    
     });

EDIT:最後の更新として、親ビューparent [object TiUIView]になりました。これには2つの子があり、2番目の子は変更したいラベルであるため、ビューを取得した後、呼び出すことができますview.children[1].settText("any thing you want")

于 2015-05-11T20:38:42.793 に答える