【发布时间】:2016-08-11 05:02:37
【问题描述】:
我试图弄清楚是否有一种简单的方法可以实现我正在做的事情。基本上,我的 Strings.xml 中有一些关于某些城市的预定义值。但是用户可以选择更改它,我是在内部存储为 SharedPReferences(本质上是覆盖资源值)。
首先,我认为这是正确的方法之一。我想保持我的实现简单,因为我了解如何做到这一点,让我们假设这是一种可接受的方法(如果不是,请提供一些关于这样做的建议 - 但这不是我正在寻找的)。
我的问题是我使用了迭代器、列表等,因此我使用了一些复杂的代码来对其进行排序。代码如下:
// 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 个循环、一个计数器等?
任何帮助将不胜感激
谢谢
【问题讨论】:
-
抱歉代码确实有效。我看错课了。但也许有更简单的方法来进行重复删除?我会更新问题
标签: java android arrays sharedpreferences