Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在一行中过滤多个标签(Appcelerator)_Javascript_Android_Tableview_Appcelerator Mobile - Fatal编程技术网

Javascript 在一行中过滤多个标签(Appcelerator)

Javascript 在一行中过滤多个标签(Appcelerator),javascript,android,tableview,appcelerator-mobile,Javascript,Android,Tableview,Appcelerator Mobile,我已经创建了一个表,其中填充了远程数据。我使用创建xml的php脚本获取这些数据。xml看起来有点像这样: <kalender> <afhaaldag> <datum>Monday 30 January 2012</datum> <afval>GFT</afval> <afval>PMD</afval> <afval>Restafval

我已经创建了一个表,其中填充了远程数据。我使用创建xml的php脚本获取这些数据。xml看起来有点像这样:

<kalender>
   <afhaaldag>
      <datum>Monday 30 January 2012</datum>
      <afval>GFT</afval>
      <afval>PMD</afval>
      <afval>Restafval</afval>
   </afhaaldag>
   <afhaaldag>
      <datum>Monday 06 February 2012</datum>
      <afval>GFT</afval>
      <afval>Snoeiresten</afval>
   </afhaaldag>
</kalender>
Monday 30 January 2012
GFT
Snoeiresten
Restafval

Monday 06 February 2012
GFT
Snoeiresten
我正在使用此循环为“afval”添加多个标签:

var allAfval = item.getElementsByTagName('afval');
var subView = Ti.UI.createView({bottom:10});
for(var j = 0; j<allAfval.length; j++)
{
    var afval = allAfval.item(j).text;
    var subLabel = Titanium.UI.createLabel({
        text:afval,
        color:'black',
        left:15,
        top:topPosition+20
    });
    topPosition +=20;
    subView.add(subLabel);
    subLabel.catId = afval;
    dataLabels.push(subLabel);
}
row.add(subView);
table.appendRow(row);
现在我想让用户能够过滤标签,但因为我在一行中有多个标签,所以在添加更多的“afval”标签之前,我无法使用以前的解决方案,因为它工作得很好。要进行过滤,我使用了一个选择器,使用这个eventListener:

picker.addEventListener('change', function(e)
{
    var filteredLabels = [];
    for(var k=0; k<dataLabels.length; k++)
    {
        if(e.row.id == 'alles')
        {
            filteredLabels = dataLabels;
        }
        else if(dataLabels[k].catId == e.row.id)
        {
            filteredLabels[filteredLabels.length] = dataLabels[k];
        }
        table.setData(filteredLabels);
    }
});
问题是我的数组数据标签由于某种原因没有填充。当我在结束时在关闭函数之前发出警报时,我会收到一条奇怪的错误消息,它不会给我任何信息:

[Ljava.lang.Object;@43f0e008


有人能帮我一下吗,我真的被困在这个问题上了。

在经历了很多挫折,但下了很大的决心后,我终于找到了解决办法。我做的是:我制作了一个子视图,因为标签必须在一行中出现,每行可以有多个标签,并将标签存储在该子视图上,即我在此之前得到的日期我还创建了一个新行,它基本上会在用户过滤后替换表中的原始行,我将这些信息存储在一个新数组中,该数组将在过滤后替换数据源

var allAfval = item.getElementsByTagName('afval');
var subView = Ti.UI.createView({bottom:10});
for(var j = 0; j<allAfval.length; j++)
{
    var afval = allAfval.item(j).text;
    var subRow = Ti.UI.createTableViewRow();
    var subLabel = Titanium.UI.createLabel({
        text:afval,
        color:'black',
        left:15,
        top:topPosition+20
    });
    var subLabelDate = Titanium.UI.createLabel({
        text:datum,
        color:'black',
        font:{fontWeight:'bold'},
        left:15,
        top:topPosition
    });
    topPosition +=20;
    subRow.add(subLabel);
    subRow.add(subLabelDate);
    subView.add(subLabel);
    subRow.catId = afval;
    dataLabels[y++] = subRow;
}
row.add(subView);
使用此eventListener,我将筛选表并为用户提供他们想要的信息。数据是原始数据源,因此如果用户想要查看所有事件,他们将获得原始表,如果他们想要特定事件,他们将获得新数据源

picker.addEventListener('change', function(e)
{       
    var filteredData = [];
    for(var k=0; k<dataLabels.length; k++)
    {
        if(e.row.id == 'alles')
        {
            filteredData = data;
        }
        else if(dataLabels[k].catId == e.row.id)
        {
            filteredData[filteredData.length] = dataLabels[k];
        }
        table.setData(filteredData);
    }
    table.setData(filteredData);
});

希望它对其他人有用。让我知道:

在最后一段代码中,您只需要for循环中的第一个setData