Ich versuche herauszufinden, ob es eine einfache Möglichkeit gibt, zu erreichen, was ich mache. Grundsätzlich habe ich einige vordefinierte Werte über einige Städte in meiner Strings.xml. Aber Benutzer die Option zu ändere es, was ich intern als SharedPReferences speichern würde (im Wesentlichen überschreibe ich die Ressourcenwerte).Wert überschreiben in Ressource mit SharedPreference
Erstens nehme ich an, dass dies eine der richtigen Möglichkeiten ist, dies zu tun. Ich möchte meine Implementierung so einfach wie möglich halten, und ich gehe davon aus, dass dies ein akzeptabler Ansatz ist (wenn nicht, bitte geben Sie einen Vorschlag dazu an - aber das ist nicht das, was ich sehe).
Mein Problem ist, dass ich einen Iterator, List usw. verwende und daher verwende ich etwas gewundenen Code, um dies zu sortieren. Der Code lautet wie folgt:
// 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);
Gibt es einen einfacheren Weg, dies zu Verwendung von 2-Arrays anstatt zu tun, 2 Loops, einen Zähler etc?
Jede Hilfe wäre viel
Dank
entschuldigung der Code funktioniert. Ich schaute auf die falsche Klasse. Aber gibt es vielleicht eine einfachere Möglichkeit, die Duplizierung zu entfernen? Ich werde die Frage aktualisieren – zooter
Check HashSet http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html –