2010-12-02 3 views
2

Ich habe zwei Spinner, Spinner A und Spinner B. Wenn der Benutzer A wechselt, wird B mit einem komplett neuen Datensatz aktualisiert. Ich habe auch einen Callback für B implementiert, um setOnItemSelectedListener zu verwenden, so dass ich einige Objekte in einer anderen Klasse ändern kann, wenn B vom Benutzer geändert wird.Programmgesteuerter Aufruf einer Methode im Gegensatz zu einem vom Benutzer initiierten Anruf über die Benutzeroberfläche - wie wird mit beiden verfahren, wenn die Anwendung den Unterschied kennen muss?

B.setOnItemSelectedListener(new OnItemSelectedListener() { 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     mComponentColor.setSelection(position); 
     mCompColorAsBuilt[mComponent.getComponentSelection()] = position; 
     setColor();  
    } 
}); 

Das Problem, das ich in lief habe ist, dass ich wirklich nicht wollen, diese Objekte, wenn der Benutzer derjenige, der den Spinner geändert wurde ändern. Da ich B basierend auf der Auswahl von A automatisch bevölkere, wird der Rückruf von B aufgerufen, wenn der Benutzer A ändert.

Irgendwelche Gedanken, wie ich mit dieser Situation umgehen könnte?

+1

Lesen Sie dies, es könnte helfen: http://StackOverflow.com/Questions/4206047/Spinner-how-May-i-Unterscheiden-User-Aktionen-von-Computer-Aktionen-in-a-onite/4206541 # 4206541 – blindstuff

+0

Danke, aber das wird ein letzter Ausweg für mich sein. Es muss einen besseren Weg geben. – user432209

+0

Wrapper erstellen und Anwendungsaufruf eine Methode und Benutzer eine andere aufrufen? Ähnlich wie boolesche Flaggen, aber mit der Möglichkeit, diese Designentscheidung zu dokumentieren. Ich mag die ganze Idee nicht :) –

Antwort

0

Im Grunde endete ich dies mit einer ähnlichen Methode wie die Flags-Methode oben erwähnt, aber tat es innerhalb des Objekts, das angepasst wird, wenn die OnClickListener-Methoden aufgerufen werden.

Grundsätzlich, indem ich mich daran erinnere, was der letzte Zustand des Spinner ist, mache ich einen Check, bevor ich irgendwelche Objekte in ihm einstelle. Wenn der Zustand gleich ist, wird nichts geändert. Glücklicherweise wurden alle Objektanpassungen von einer anderen Klasse vorgenommen, was es relativ einfach machte, sie zu handhaben. Ich bin nicht allzu glücklich damit, aber ich denke, es war letztendlich besser als die Verwendung von Flags innerhalb der Aktivitätsklasse.

Dank denen, die dazu beigetragen haben.