使用数组中的特定条目填充微调器

时间:2012-09-08 19:27:17

标签: android arraylist spinner android-arrayadapter

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

  • Country1 - Spot1

  • Country1 - Spot2

  • Country2 - Spot1

  • 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,并且在使用它时遇到了很多麻烦。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:3)

您的代码中存在很多小错误:

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

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

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);
    }

答案 1 :(得分:0)

您的代码中有多处错误。

首先,ArrayList的方法addAll必须将Collection作为参数。您传递的是Android数组ID R.array.spots_array;请记住Android ids是整数。

从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的更多内容here