【问题标题】:Combine String Array and Iterator and sort组合字符串数组和迭代器并排序
【发布时间】:2016-08-06 21:40:36
【问题描述】:

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

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

【问题讨论】:

    标签: java android arrays sorting


    【解决方案1】:

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

    【讨论】:

      【解决方案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);
      

      【讨论】:

      • 但是userCities 是列表对象对吧?
      • 你能发readCitiesFromPref();方法代码吗...我不明白你为什么需要Iterator
      猜你喜欢
      • 1970-01-01
      • 2012-11-29
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多