2015-05-14 8 views
14

Ho provato ad aggiornare/modificare il lebel in Android usando titanium.but il valore non viene mostrato sul testo. Ma sto ottenendo il valore aggiornato in l'avviso. Ma l'ios funziona perfettamente.Il testo dell'etichetta non si aggiorna in tableview figli in titanium android.but funziona in IOS

var itemcounttext = Ti.UI.createLabel({ 
top: 5, 
color: "#000000", 
left:10, 
text:data[i].itemCount, 
width: Ti.UI.SIZE, 
height: Ti.UI.SIZE, 
}); 
var additem = Ti.UI.createImageView({ 
image: "/images/plus.jpg", 
top: 5, 
width: Ti.UI.SIZE, 
left:10, 
height: Ti.UI.SIZE, 
}); 
adddeleteitemview.add(additem); 
additem.addEventListener('click', function(e) 
    { 
     var item=e.source.getParent(); 
     squantity = e.source.squantity; 
      squantity = Number(squantity) + 1; 
      item.children[1].text = squantity; 
      alert(item.children[1].getText()); 

Qui sto ricevendo l'avviso con il valore aggiornato corretto. Ma non viene visualizzato nell'etichetta. Puoi darmi un'idea per risolvere questo problema in Android.

EDIT:

Da VRK commento Ho provato questo also.But non è working.but sto ottenendo l'avviso in modo corretto.

item.children[1].setText(squantity); 

EDIT:

ho provato con jsplaine answer.But non riesco a ottenere la soluzione. Qui ho creato il tableview. In questa riga tableview stiamo creando la view.in quella vista ho aggiunto l'additem, itemcounttext values.if clicchiamo sull'additem significa che dobbiamo cambiare il valore itemcounttext.Questo è un flusso.

come qui di seguito screenshot è vista figli di mia app Tableview:

productname 

remove  itemcount add 
image  text  image 

questa tre immagine, testo, vengono aggiunti i valori di immagine in una view.That Ecco perché sto aggiungendo il codice per ottenere la vista padre mentre si fa clic aggiungere immagine:

var item=e.source.getParent(); 

qui sto ottenendo il parent.also mattino ha scritto il codice qui sotto per ottenere l'etichetta per questo punto di vista:

item.children[1].text 

Se faccio clic sull'immagine aggiunta, sto ottenendo il valore dell'etichetta è aumentato di 1 correttamente .am verificato con questo codice alert(item.children[1].getText());. ma il valore aggiornato non viene mostrato. Questo è il mio dubbio esatto.

EDIT:

Questo è il mio codice sorgente completo.

dataArray = [];  
$.ViewCartItemslist_total_value.text = totalamount; 
for(var i=0; i<data.length; i++){ 

// creazione del tableviewrow

var row = Ti.UI.createTableViewRow({ 
layout : 'horizontal', 
top:5, 
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, 
font: { fontSize: '10dp' }, 
color: '#040404', 
wordWrap: true, 
height: Ti.UI.SIZE, 
ellipsize: true 
})); 

// creazione a vista all'interno di ciascuna ogni riga di tableviewrow

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, 
left:10, 
width: "15%", 
height: Ti.UI.SIZE, 
}); 
adddeleteitemview.add(removeitem); 
var itemcounttext = Ti.UI.createLabel({ 
top: 5, 
color: "#000000", 
left:10, 
text:data[i].itemCount, 
textAlign:'center', 
width: "15%", 
height: Ti.UI.SIZE, 
}); 
adddeleteitemview.add(itemcounttext); 

var additem = Ti.UI.createImageView({ 
image: "/images/plus.jpg", 
top: 5, 
width: "15%", 
left:10, 
squantity : data[i].itemCount, 
spprice :data[i].itemPrice, 
height: Ti.UI.SIZE, 
}); 
adddeleteitemview.add(additem); 
additem.addEventListener('click', function(e) 
    { 
     var item=e.source.getParent(); 
     spprice = e.source.spprice; 
     if(item.children[1].getText() == e.source.squantity){ 
     squantity = e.source.squantity; 
      totalqty = Number(totalqty) + Number(1); 
      $.ViewCartItemslist_header_cart.text = totalqty; 
      totalamount = Number(totalamount) + Number((spprice)); 
      squantity = Number(squantity) + 1; 
      item.children[1].text = squantity; 
      // item.itemcounttext.text = squantity; 
      // item.itemcounttext.setText(squantity); 
      // item.children[1].setText(squantity); 
      alert(item.children[1]+" "+item.children[1].getText()); 
      $.ViewCartItemslist_total_value.text = totalamount; 
      totalprice = Number(spprice) * squantity; 
     } 
      else { 
       squantity = item.children[1].getText(); 
      totalqty = Number(totalqty) + Number(1); 
      $.ViewCartItemslist_header_cart.text = totalqty; 
      totalamount = Number(totalamount) + Number((spprice)); 
      squantity = Number(squantity) + 1; 
      item.children[1].text = squantity; 
      item.children[1].setText(squantity); 
      alert(item.children[1].getText()); 
      $.ViewCartItemslist_total_value.text = totalamount; 
      totalprice = Number(spprice) * squantity; 
      } 
      }); 
     row.add(adddeleteitemview); 

     dataArray.push(row); 
    row.addEventListener('click', function(e) { 
    }); 
    $.ViewCartItemstableView.setData(dataArray); 
    } 
+0

hai provato item.children [1] .setText (squantity); – VRK

+0

@VRK sì provato. Ma anche non funziona. –

+0

Vedo definito itemcounttext, ma non è referenziato altrove. In questo codice, non è un genitore o figlio di qualsiasi altra cosa definita lì. Perché non rendere itemcounttext una proprietà di additem? Quindi potresti additem.itemcounttext.setText (qualunque cosa). – jsplaine

risposta

3

Invece di camminare l'albero padre/figlio, basta fare itemcounttext una proprietà di additem:

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

var additem = Ti.UI.createImageView({ 
image: "/images/plus.jpg", 
top: 5, 
width: Ti.UI.SIZE, 
left:10, 
height: Ti.UI.SIZE, 
}); 

additem.countTextLabel = itemcounttext; 

adddeleteitemview.add(additem); 

additem.addEventListener('click', function(e) { 
var item=e.source; 
var squantity = e.source.squantity; 
squantity = Number(squantity) + 1; 
item.countTextLabel.setText(squantity); 
alert(item.countTextLabel.getText()); 
}); 
+0

Continuo a non vedere itemcounttext come genitore o figlio di additem nel codice. Ma va bene. Invece di 'item.countTextLabel.setText (squantity);', Basta fare 'itemcounttext.setText (squantity);'. itemcounttext è nell'ambito del tuo listener di eventi, non è necessario che venga passato ad esso. – jsplaine

+0

è anche provato.non funziona ... itemcounttext è un fratello di un additem. –

0

Ho lottato con questo per la parte migliore di un pomeriggio. Spero che questo aiuti qualcuno.

Nel mio caso ho avuto un tableview con solo 1 riga personalizzata per progetto. Facendo clic sulla riga mi ha permesso di scegliere un nuovo valore (nome e descrizione) da una tabella diversa, e quindi aggiornare i primi dati di riga di tabella viewview con i valori appena selezionati.

Per la vista tabella problematica, stavo usando setData, ma le righe personalizzate sono abbastanza complesse quindi non volevo dover ricostruire una riga di una di queste file complesse. Ecco cosa ha funzionato per me ... Ho appena aggiornato le etichette nell'array di dati contenuti in una vista wrapper contenuta nella riga. In questo modo, invece di ricostruire tutto l'array di dati da zero, sono stato in grado di modificare l'array e quindi di impostare nuovamente i dati. dataStatus [0] .children [0] .children [0] .text = sice.row.name;
dataStatus [0] .children [0] .children [1] .text = sice.row.statusdescription; tableviewStatus.setData (dataStatus);

Ho solo 1 riga in modo che dataStatus [0] indirizzi quella riga. Quindi il primo figlio è la visualizzazione del wrapper, e ho contato il mio layout e il 1 ° e il 2 ° figlio del wrapper sono le etichette che dovevo aggiornare. Quindi, dopo aver modificato l'array, ho appena terminato setData. Ha funzionato come un campione.

Spero che aiuti qualcuno.