0

我正在开发适用于 Android 的应用程序。为此,我正在开展一项活动,您可以在其中选择您的国家,然后在该国家/地区选择一个地点。我有一个微调器,其中包含所有可用国家/地区的列表。现在,我想要它做的是获取已选择的国家/地区,然后过滤我拥有的以已选择的国家/地区开头的项目的地点列表。然后它应该将所选国家/地区的点放入不同的微调器中。为清楚起见,国家列表只是国家列表,地点列表如下所示:

  • 国家 1 - 地点 1

  • 国家 1 - 地点 2

  • 国家 2 - 地点 1

  • Country2 - Spot2

等等。

这就是我认为代码应该像这样工作:

  • 从微调器 1 中获取选定的国家/地区。
  • 制作一个包含斑点的新 ArrayList。
  • 制作第二个空的 ArrayList。
  • 对于包含点的 ArrayList 的每个条目,检查它是否以所选国家/地区开头。
  • 如果是这样,请将其添加到第二个 ArrayList。
  • 全部完成后,使用第二个 ArrayList 创建一个 ArrayAdapter。
  • 为微调器 2 设置此 ArrayAdapter。

我尝试使用以下代码来实现这一点:

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    String selectedCountry = parent.getItemAtPosition(pos).toString();
    ArrayList<CharSequence> arraylist = new ArrayList<CharSequence>();
    arraylist.addAll(R.array.spots_array);
    ArrayList<CharSequence> arraylist2 = new ArrayList<CharSequence>();
    for (i=0; i<arraylist.size(); i++) {
        String delimiter = " - ";
        if ((arraylist(i).split(delimiter)).equals(selectedCountry)) {
            arraylist2.add(arraylist(i).string.substring(string.lastIndexOf('-') + 1));
        }

    }
    ArrayAdapter<CharSequence> arrayAdapter2 = ArrayAdapter.createFromResource(this,  arraylist2<CharSequence>, android.R.layout.simple_spinner_item);
    arrayAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner2.setAdapter(arrayAdapter2);
    spinner2.setOnItemSelectedListener(this);
}

但它给出了几个错误:

  • 在 addAll() 它说:“ArrayList 类型中的方法 addAll(int, Collection) 不适用于参数 (int)”
  • 在arraylist它说:“方法arraylist(int)未定义类型配置”
  • 在字符串(子字符串内部)它说:“字符串无法解析”

我对 Android 还是比较陌生,并且在使其正常工作时遇到了很多麻烦。有人可以帮我吗?

4

2 回答 2

3

您的代码中有很多小错误:

  • 要访问元素中的arraylist使用get(position)方法
  • 当您添加“spot_array”时,您实际上添加了资源的 id,而不是数组本身(请参见此处

这是您的代码更新,它应该可以工作或可能需要一些调整

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        String selectedCountry = parent.getItemAtPosition(pos).toString();
        List<CharSequence> arraylist = new ArrayList<CharSequence>();
        arraylist.addAll(Arrays.asList(getResources().getTextArray(R.array.spots_array)));
        List<CharSequence> arraylist2 = new ArrayList<CharSequence>();
        String delimiter = " - ";
        for (int i=0; i<arraylist.size(); i++) {
            String country = arraylist.get(i).toString();
            if (country.contains(selectedCountry)) {
                arraylist2.add(country.substring(country.lastIndexOf('-') + 2));
            }

        }
        ArrayAdapter<CharSequence> arrayAdapter2 = ArrayAdapter.createFromResource(this,  android.R.id.text1, android.R.layout.simple_spinner_item);
        arrayAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner2.setAdapter(arrayAdapter2);
        spinner2.setOnItemSelectedListener(this);
    }
于 2012-09-08T20:27:50.110 回答
0

您的代码中有几个错误。

首先,addAllArrayList 的方法必须将 a 作为参数Collection。您正在传递一个 Android 数组 id R.array.spots_array;请记住,Android id 是整数。

从 Android 资源中获取字符串数组的通常方法是(在活动中):

String[] myArray = getResources().getStringArray(R.array.spots_array);

第二个错误:您应该ArrayList通过调用方法来访问元素get(position),而不是直接(arraylist(position))。类似的东西arraylist.get(position)

第三个错误:

arraylist2.add(arraylist(i).string.substring(string.lastIndexOf('-') + 1));

应该只是arraylist2.add(arraylist.get(i));将一个列表元素添加到另一个列表元素。

更多信息ArrayLists可以在这里找到。

于 2012-09-08T20:28:05.983 回答