结合String Array和Iterator并进行排序

时间:2016-04-15 04:28:05

标签: java android arrays sorting

我的应用中有2组值 - 资源文件中有1组,共享偏好中有1组。有没有一种简单的方法来组合这两者并为适配器创建一个排序列表?这是我的代码:

  Spinner copyFromCity = (Spinner) findViewById(R.id.spinner);


    Resources res = getResources();
    String [] predefinedCities = res.getStringArray(R.array.predefined_cities);

    // Necessary to add Iterator String to an adapter
    ArrayList<String> sortedPredefinedCities = new ArrayList<String>();
    ArrayAdapter<CharSequence> adapter = new ArrayAdapter(
            this,
            android.R.layout.simple_spinner_item,
            new ArrayList(Arrays.asList(predefinedCities))); 


    // Add values from our custom cities onto the Adapter via SharedPreferences

    prefs = getSharedPreferences(MY_PREFS_NAME, Context.MODE_PRIVATE);
    Iterator<String> userCities = readCitiesFromPref(); // unsorted values

    while(userCities.hasNext()){

        adapter.add(userCities.next());
    }

/* TODO Way to sort both these values into alphabetical order */

    // Specify the layout to use when the list of choices appears
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // Apply the adapter to the spinner
    copyFromCity.setAdapter(adapter);

添加readCitiesFromPref()方法以阐明返回Iterator的原因

protected Iterator<String> readCitiesFromPref() {

    // See if preferences store this
    JSONObject citiesList = null;
    Iterator<String> userCities = null;
    try {

        // Yes, so get the values out
        citiesList = new JSONObject(prefs.getAll());

        userCities = citiesList.keys();


    } catch (NullPointerException e1) {

        //TODO
    }

    return userCities;
}

2 个答案:

答案 0 :(得分:2)

你可以这样做: 将string array转换为ListIterator转换为List Combine他们 Sort他们喜欢Collections.sort(yourCombinedList); feed他们到适配器

答案 1 :(得分:2)

我认为将这些数组/列表添加到List,排序并将其设置为适配器

    String [] predefinedCities = res.getStringArray(R.array.predefined_cities);

    prefs = getSharedPreferences(MY_PREFS_NAME, Context.MODE_PRIVATE);
    Iterator<String> userCities = readCitiesFromPref(); // unsorted values

    List<String> copyOfCities = new ArrayList<String>();
    while (userCities.hasNext()){

        copyOfCities.add(userCities.next());

    }

    ArrayList<String> sortedCities = new ArrayList<String>();
    sortedCities.addAll(copyOfCities);
    sortedCities.addAll(Arrays.asList(predefinedCities));
    Collections.sort(sortedCities);

    ArrayAdapter<CharSequence> adapter = new ArrayAdapter(
            this,
            android.R.layout.simple_spinner_item,
            sortedCities);