我正在试图弄清楚是否有一种简单的方法来实现我正在做的事情。基本上我在Strings.xml中有一些关于某些城市的预定义值。但是用户可以选择更改它我的“m”在内部存储为SharedPReferences(实质上是覆盖资源值)。
首先,我认为这是正确的方法之一。我想保持我的实现简单,因为我知道如何做到这一点,让我们假设这是一种可接受的方法(如果没有,请提供一些关于这样做的建议 - 但这不是我正在看的)。 / p>
我的问题是我使用了Iterator,List等,因此我使用了一些有问题的代码来对它进行排序。代码如下:
// Get our predefined cities from our resources file
String [] predefinedCities = res.getStringArray(R.array.predefined_cities);
ArrayList<String> predefinedCitiesMinusOverridden = new ArrayList<String >();
// Add values from our custom cities onto the Adapter via SharedPreferences
prefs = getSharedPreferences(MY_PREFS_NAME, Context.MODE_PRIVATE);
Iterator<String> userCities = readCitiesFromPref();
// Start of sort operation - to show these in alphabetical order
List<String> copyOfUserCities = new ArrayList<String>();
while (userCities.hasNext()){
copyOfUserCities.add(userCities.next());
}
/* Code start to override resource value, i.e. remove resource value if
our SharedPreferences contain the city. This means user has over-ridden values
*/
int preDefCounter = 0;
for(int i=0; i<predefinedCities.length; i++){ // for each city in predefined city
boolean duplicateFound = false;
for(int j=0; j<copyOfUserCities.size(); j++) { // check if there is match in user defined value
if(predefinedCities[i].toString().equals(copyOfUserCities.get(j).toString())){
duplicateFound = true; // Set that the string is found
break; // NO need to continue checking this further
}
}
// Here we finally find out whether to retain our preDefined city or not
if(!duplicateFound){
predefinedCitiesMinusOverridden.add(preDefCounter, predefinedCities[i]); // Retain it as new String
preDefCounter++; // increment counter for our String Array
}
}
/* End Code to remove duplicate values
*/
ArrayList<String> sortedCities = new ArrayList<String>();
sortedCities.addAll(copyOfUserCities);
sortedCities.addAll(predefinedCitiesMinusOverridden);
Collections.sort(sortedCities);
sortedCities.add(0, "No City Selected"); // First selection should be "No City Selected"
//End sort operation
ArrayAdapter<CharSequence> adapter = new ArrayAdapter(
this,
android.R.layout.simple_spinner_item,
sortedCities);
有没有更简单的方法来做这个而不是使用2个数组,2个循环,一个计数器等?
非常感谢任何帮助
由于
答案 0 :(得分:0)
您可以使用一个Set对象而不是两个ArrayList
个对象。您对Set
集合类型有类似的操作但行为不同。
不包含重复元素的集合。更正式的,集合 不包含元素e1和e2对,使得e1.equals(e2)和at 大多数一个null元素。正如其名称所暗示的,这个界面模型 数学集抽象。