如何在Android中获取ArrayList的项目

时间:2017-09-17 11:40:45

标签: java android arraylist

在我的应用程序中,我应该从服务器获得一些list,我想显示此列表。

我已经编写了以下代码:

private String[] mostlyMatchedKeywordsStrings;
mostlyMatchedKeywordsStrings = searchResponse.getData().getMostlyMatchedKeywordsText();
cloudChipList.clear();
fullSearchMini_chipCloud.removeAllViews();

for (int i = 0; i < mostlyMatchedKeywordsStrings.length; i++) {

    cloudChipList.add(mostlyMatchedKeywordsStrings[i]);
    if (i >= mostlyMatchedKeywordsStrings.length - 2) {

        fullSearchMini_didYouMeanLay.setVisibility(View.VISIBLE);
        fullSearchMini_chipCloud.addChip(mostlyMatchedKeywordsStrings[i]);
        Log.e("searchKeys", mostlyMatchedKeywordsStrings[i]);

        fullSearchMini_chipCloud.setChipListener(new ChipListener() {
            @Override
            public void chipSelected(int i) {
                try {
                    Log.e("searchKeys", "new : " + mostlyMatchedKeywordsStrings[i]);

                }
                catch (Exception e) {
                }
            }

            @Override
            public void chipDeselected(int i) {

            }
        });
    }
}

当我向用户显示此数据时,它是正确的并显示数据,但是,当我点击此项时,它会向我显示另一个项目!

在Logcat中,它会显示以下项目:

searchKeys: Recep Ivedik 5

但是当我点击这个项目时,它会在logcat中显示另一个项目:

searchKeys: new : Recep Ivedik 3

要显示该项目并单击它,我使用此代码mostlyMatchedKeywordsStrings[i],为什么在logCat中显示另一项单击此项目时?

1 个答案:

答案 0 :(得分:0)

我认为你的问题是由于数组错误混合造成的。 我从来没有使用过ChipCloud,但我认为如果你只为你的mostlyMatchedKeywordsStrings数组的某些项注册监听器,那么注册的数组会有不同的索引。

例如,如果您有mostlyMatchedKeywordsStrings个5项(0 =&gt; 1,1 =&gt; 2,2 =&gt; 3,3 =&gt; 4,4 =&gt; 5)并且您只注册它的最后两项,然后在仅有两个索引的数组中注册ChipListener cosists(0 =&gt; 4,1 =&gt; 5)。如您所见,您有2个具有非对齐索引的数组。您收到i的{​​{1}}相对于第二个数组,但您可以使用它来访问第一个数组中的数据。

我不确定这是不是问题,让我知道我是否已经做好了预测:)

试试这段代码:

public void chipSelected(int i)