Update data in matrix of cells

倾然丶 夕夏残阳落幕 提交于 2019-12-11 18:53:52

问题


This code implements a 60 cell spreadsheet, 6x10 rows,columns. At the end of each row are two labels, one for row total and for running total. The main issue here is how to update the row and running total labels when the calc button is pressed.

I would also like to move the button from the bottom of the scrollview to the bottom of the window where it's always visible. Another view for buttons at the bottom?

Ti.include("toast.js"); // 3rd-party code; displays notifications

var i=0;
var r=0;
var rows = 10;
var columns = 6;

left = ["0%","12%","24%","36%","48%","60%"];



Titanium.UI.setBackgroundColor('#000');

var win1 = Titanium.UI.createWindow({  
    title:'Target 1',
    exitOnClose: true,
    backgroundColor:'#fff'
});


win1.addEventListener('androidback' , function(e){
     win1.close();
     var activity = Titanium.Android.currentActivity;
     activity.finish();
});

var scrollView1 = Ti.UI.createScrollView({
  bottom:120,
  contentHeight: 'auto',
  layout: 'vertical'
});


if (Ti.UI.Android){
  win1.windowSoftInputMode = Ti.UI.Android.SOFT_INPUT_ADJUST_PAN;
}


var buttonCalc = Titanium.UI.createButton({
   title: 'Calc',
   top: 10,
   width: 100,
   height: 50,
   left: "10%"
});




var lbAttrs1 = {
            text: "000",
            left: "74%",
            color:'#000',width:'auto',height:'auto',textAlign:'left',
            font:{fontSize:24,fontWeight:'regular'}
            };


var lbAttrs2 = {
            text: "000",
            left: "88%",
            color:'#000',width:'auto',height:'auto',textAlign:'left',
            font:{fontSize:24,fontWeight:'regular'}
            };


var baseAttrs = {
    borderStyle : Titanium.UI.INPUT_BORDERSTYLE_ROUNDED,
    keyboardType:  Titanium.UI.KEYBOARD_NUMBERS_PUNCTUATION,
    maxLength: 2,
    top: 10,
    height: 60,
    value: "",
    width: '12%',
    color : '#000000'
};

 var tfields = [];
 var labels1 =  [];
 var labels2 = []; 


buttonCalc.addEventListener('click',function(e)
{

  var a = 0;
  var b = 0;

for (j=0;j<rows;j++)
{
  a = 0;

  for (i=0;i<columns;i++)
    a = parseInt(tfields[j][i].value) + a; 

   b = b + a;

   labels1[j] = a.toString();
   labels2[j] = b.toString();
}

for (j=0;j<rows;j++)

alert( labels1[j]+'  '+labels2[j]+ ' ' +  j.toString());

});


function createRow1(i) // start create row 

{ 

  row1 = Ti.UI.createView({
    backgroundColor: 'white',
    borderColor: '#bbb',
    borderWidth: 1,
    width:'100%', height: 70,
    top: 0, left: 0 });

var tfield1 = [];
var label1 =  [];
var label2 = []; 

for (i=0;i<columns;i++)
  {
    tfield1[i] = Ti.UI.createTextField(baseAttrs); 
    label1[i] = Ti.UI.createLabel(lbAttrs1);
    label2[i] = Ti.UI.createLabel(lbAttrs2);
  }


  tfield1[0].addEventListener('change', function()
    {
    if (tfield1[0].value > 10)
      {
       tfield1[0].value = "";  
       showMessageTimeout("More than 10.",15);
      }
     }); 

 tfield1[1].addEventListener('change', function()
   {
    if (tfield1[1].value > 10)
       {
      tfield1[1].value = "";  
       showMessageTimeout("More than 10.",15);
      }  

    }); 


  tfield1[2].addEventListener('change', function()
   {
    if (tfield1[2].value > 10)
       {
      tfield1[2].value = "";  
       showMessageTimeout("More than 10.",15);
      }
    }); 



  tfield1[3].addEventListener('change', function()
   {
    if (tfield1[3].value > 10)
        {
      tfield1[3].value = "";  
       showMessageTimeout("More than 10.",15);
      }  

    }); 

   tfield1[4].addEventListener('change', function()
   {
    if (tfield1[4].value > 10)
         {
      tfield1[4].value = "";  
       showMessageTimeout("More than 10.",15);
      }    
    }); 

tfield1[5].addEventListener('change', function()
   {
    if (tfield1[5].value > 10)
         {
      tfield1[5].value = "";  
       showMessageTimeout("More than 10.",15);
      }          
   }); 


tfield1[0].left =  left[0];
tfield1[1].left =  left[1];
tfield1[2].left =  left[2];


tfield1[3].left =  left[3];
tfield1[4].left =  left[4];
tfield1[5].left =  left[5];


for (i=0;i<columns;i++)
 {
   row1.add(tfield1[i]);
   row1.add(label1[i]);
   row1.add(label2[i]);
  }

;
tfields.push(tfield1);  
labels1.push(label1);
labels2.push(label2);

return row1;
}  /// end of createrow1

for(i = 0; i < rows; i++){
row1 = createRow1(i);
scrollView1.add(row1);
}

win1.add(scrollView1);
scrollView1.add(buttonCalc);
// win1.add(buttonCalc);

win1.open();

回答1:


Point 1.

That is a typo, you should substitute each occurrence of labels1[j] and labels2[j] to labels1[j].text and labels2[j].text respectively:

buttonCalc.addEventListener('click',function(e)
{

    var a = 0;
    var b = 0;

    for (j=0;j<rows;j++)
    {
        a = 0;

        for (i=0;i<columns;i++){
            var newValue = parseInt(tfields[j][i].value);
            if(!isNaN(newValue) && typeof(newValue) === 'number')
                a = newValue + a;
        } 

        b = b + a;

        labels1[j].text = a.toString();
        labels2[j].text = b.toString();
    }
    for (j=0;j<rows;j++)
        Ti.API.info( labels1[j].text +'  '+labels2[j].text + ' ' +  j.toString());

});

And also it must be changed these parts:

function createRow1(i) // start create row 
{ 
...
    for (i=0;i<columns;i++)
    {
        tfield1[i] = Ti.UI.createTextField(baseAttrs); 
    }
    label1 = Ti.UI.createLabel(lbAttrs1); //there is only one per row
    label2 = Ti.UI.createLabel(lbAttrs2); //there is only one per row
...
    for (i=0;i<columns;i++)
    {
        row1.add(tfield1[i]);
    }
    row1.add(label1); //there is only one per row
    row1.add(label2); //there is only one per row

    tfields.push(tfield1);  
    labels1.push(label1);
    labels2.push(label2);

    return row1;
}  /// end of createrow1

Point 2.

you can do it this way:

var scrollView1 = Ti.UI.createScrollView({
    top:0,
    height:'60%', //Put your desired value here
    contentHeight: 'auto',
    layout: 'vertical'
});

...

var buttonCalc = Titanium.UI.createButton({
    title: 'Calc',
    top: '70%', // Put your desired value here greater than scrollView1.height
    width: 100,
    height: 50,
    left: "10%"
});

...
win1.add(scrollView1);
//scrollView1.add(buttonCalc);
win1.add(buttonCalc);

Extra point.

you need to set softKeyboardOnFocus property in your baseAttrs:

    var baseAttrs = {
        borderStyle : Titanium.UI.INPUT_BORDERSTYLE_ROUNDED,
        keyboardType:  Titanium.UI.KEYBOARD_NUMBERS_PUNCTUATION,
        softKeyboardOnFocus: Titanium.UI.Android.SOFT_KEYBOARD_SHOW_ON_FOCUS,
        maxLength: 2,
        top: 10,
        height: 60,
        value: "",
        width: '12%',
        color : '#000000'
    };

this way, softKeyboard will be shown on focus the first time.

Finally, good luck with your app :-)



来源:https://stackoverflow.com/questions/20224603/update-data-in-matrix-of-cells

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!