2013-05-16 5 views
6

Ich möchte einen Spinner in meiner App verwenden. Der Kontext (Elemente) des Spinner hängt von den Benutzereinstellungen in den Einstellungen der App ab.Android Spinner dynmic ändern Artikel

Ich habe den Spinner ohne Elemente erstellt. Nach dem Laden der App hat der Spinner einen Eintrag. Um die Einträge zu erhalten, muss der Benutzer zum Menü gehen und ein Bild laden. Basierend darauf werden die Elemente in ein String-Array geladen. Dieses String Array wird an einen Adapter übergeben. Siehe Code:

List<String> als = new ArrayList<String>(); 
als = Arrays.asList(Data.getfloornames()); 
adapter = new ArrayAdapter<String>(this, R.array.flooritem, als); 
adapter.notifyDataSetChanged(); 
floornum.setAdapter(adapter); 

Danach ist dies erledigt. Der Benutzer kehrt zu den Menüeinstellungen zurück. Ein Klick in das Menü Einstellungen der Return-Taste der Geräte, bewirkt einen Abbruch der App.

Error from Logcat is FATAL Exception: main. 
05-16 15:12:43.193: E/AndroidRuntime(9128): android.content.res.Resources$NotFoundException: Resource ID #0x7f060002 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.content.res.Resources.getValue(Resources.java:1014) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.content.res.Resources.loadXmlResourceParser(Resources.java:2139) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.content.res.Resources.getLayout(Resources.java:853) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.LayoutInflater.inflate(LayoutInflater.java:394) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:371) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:193) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.widget.Spinner.onMeasure(Spinner.java:439) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.View.measure(View.java:15518) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:681) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.View.measure(View.java:15518) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:681) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.View.measure(View.java:15518) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.View.measure(View.java:15518) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.View.measure(View.java:15518) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.View.measure(View.java:15518) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.View.measure(View.java:15518) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.Choreographer.doFrame(Choreographer.java:532) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.os.Handler.handleCallback(Handler.java:725) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.os.Handler.dispatchMessage(Handler.java:92) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.os.Looper.loop(Looper.java:137) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at java.lang.reflect.Method.invoke(Method.java:511) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
05-16 15:12:43.193: E/AndroidRuntime(9128):  at dalvik.system.NativeStart.main(Native Method) 

Was mache ich falsch? Ist es nicht möglich die Spinner Items in den Menüeinstellungen der App zu setzen?

Antwort

8

Sie können den folgenden Code versuchen, um Artikel dynamisch in Spinner hinzuzufügen.

Spinner spinner = (Spinner)findViewById(R.id.mySpinner); 
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, android.R.id.text1); 
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
spinner.setAdapter(spinnerAdapter); 
spinnerAdapter.add("value"); 
spinnerAdapter.notifyDataSetChanged(); 
+0

Das funktioniert. Vielen Dank! –

+0

Wird ein neuer ArrayAdapter benötigt? Können wir das vorhandene nicht verwenden und ihm einfach die neuen ArrayList/Werte zuweisen? –

0

versuchen, dies zu ändern:

adapter.notifyDataSetChanged(); 
floornum.setAdapter(adapter); 

in diese:

floornum.setAdapter(adapter); 
adapter.notifyDataSetChanged(); 
+0

Das bringt nichts. Es bleibt immer noch der gleiche Fehler. –

0

Siehe ArrayAdapter javadoc.

textViewResourceId Die Ressourcen-ID für eine Layout-Datei eine Textview enthält, wenn Ansichten Instanziierung zu verwenden.

+0

Der Spinner hat keine textView. Ich verwende die Array-Einträge in String.xml als Ressource. Ich habe auch versucht, die Layout-ID und die ID des Spinner zu verwenden. Ergebnis ist immer das Gleiche. –

+0

ja es hat, ändern Sie R.array.flooditem zu android.R.layout.simple_spinner_item und sehen Sie den Unterschied – pskink

+0

Oh sorry nur Ihre Antwort jetzt gesehen. Es ist mit der Antwort von Sandeep gelöst. –