Ciao a tutti, mi sono incagliato in un problema su una cosa che pensavo fosse banale ovvero aggiungere items ad uno Spinner in Android.
Ho il seguente codice:
main.xml
strings.xmlcodice:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:text="@string/device_prompt" /> <Spinner android:id="@+id/spinner" android:layout_width="fill_parent" android:layout_height="wrap_content" android:prompt="@string/device_prompt" /> </LinearLayout>
myApp.javacodice:<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, myApp!</string> <string name="app_name">myApp</string> <string name="device_prompt">Choose a device to connect</string> <string-array name="device_array"> </string-array> </resources>
se faccio cosi' la adapter.add mi da un errore di tipo: UnsupportedOperationExceptioncodice:BlueAndMeConnection conn; private Spinner spinner; private ArrayAdapter<CharSequence> adapter; private Set<BluetoothDevice> devices; private int selectedDeviceToConnect; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { String function = "onCreate -> "; super.onCreate(savedInstanceState); setContentView(R.layout.main); try { conn = new BlueAndMeConnection(this); spinner = (Spinner) findViewById(R.id.spinner); adapter = ArrayAdapter.createFromResource( this, R.array.device_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); // search for bluetooth paired devices devices = conn.getPairedDevices(); if (devices.size() > 0) { Log.d(TESTER_TAG, function+"devices.size() = "+devices.size()); for (BluetoothDevice device : devices) { Log.d(TESTER_TAG, function+"Prima di add"); adapter.add(device.getName()); } spinner.setOnItemSelectedListener(new MyOnItemSelectedListener()); } else { Log.d(TESTER_TAG, function+"devices.size() = 0"); } } catch (Exception e) { Log.d(TESTER_TAG, function+"Errore: "+e.toString()); } } public class MyOnItemSelectedListener implements OnItemSelectedListener { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { selectedDeviceToConnect = pos; Toast.makeText(parent.getContext(), "The device is " + parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show(); } public void onNothingSelected(AdapterView parent) { // Do nothing. } }
Su internet ho trovato quest'altra soluzione:
In questo caso da log sembra che la adapter.add vada bene pero' poi l'Activity crasha e dal logcat mi torna un errore di questo genere:codice:BlueAndMeConnection conn; private Spinner spinner; private ArrayAdapter<CharSequence> adapter; private Set<BluetoothDevice> devices; private int selectedDeviceToConnect; List<CharSequence> dev = new ArrayList<CharSequence>(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { String function = "onCreate -> "; super.onCreate(savedInstanceState); setContentView(R.layout.main); try { conn = new BlueAndMeConnection(this); spinner = (Spinner) findViewById(R.id.spinner); adapter = new ArrayAdapter<CharSequence>(this, R.array.device_array, dev); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // spinner.setAdapter(adapter); Log.d(TESTER_TAG, function+"Fin qui OK!"); // search for bluetooth paired devices devices = conn.getPairedDevices(); if (devices.size() > 0) { Log.d(TESTER_TAG, function+"devices.size() = "+devices.size()); for (BluetoothDevice device : devices) { Log.d(TESTER_TAG, function+"Prima di add"); adapter.add(device.getName()); } spinner.setAdapter(adapter); // spinner.setOnItemSelectedListener(new MyOnItemSelectedListener()); } else { Log.d(TESTER_TAG, function+"devices.size() = 0"); } } catch (Exception e) { Log.d(TESTER_TAG, function+"Errore: "+e.toString()); } } public class MyOnItemSelectedListener implements OnItemSelectedListener { public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { selectedDeviceToConnect = pos; Toast.makeText(parent.getContext(), "The device is " + parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show(); } public void onNothingSelected(AdapterView parent) { // Do nothing. } }
Che sta succedendo? Dove sbaglio?codice:D/AndroidRuntime(15249): Shutting down VM W/dalvikvm(15249): threadid=1: thread exiting with uncaught exception (group=0x4001d7d0) E/AndroidRuntime(15249): FATAL EXCEPTION: main E/AndroidRuntime(15249): android.content.res.Resources$NotFoundException: Resource ID #0x7f050000 E/AndroidRuntime(15249): at android.content.res.Resources.getValue(Resources.java:892) E/AndroidRuntime(15249): at android.content.res.Resources.loadXmlResourceParser(Resources.java:1869) E/AndroidRuntime(15249): at android.content.res.Resources.getLayout(Resources.java:731) E/AndroidRuntime(15249): at android.view.LayoutInflater.inflate(LayoutInflater.java:318) E/AndroidRuntime(15249): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:332) E/AndroidRuntime(15249): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323) E/AndroidRuntime(15249): at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:192) E/AndroidRuntime(15249): at android.view.View.measure(View.java:8226) E/AndroidRuntime(15249): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132) E/AndroidRuntime(15249): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1012) E/AndroidRuntime(15249): at android.widget.LinearLayout.measureVertical(LinearLayout.java:381) E/AndroidRuntime(15249): at android.widget.LinearLayout.onMeasure(LinearLayout.java:304) E/AndroidRuntime(15249): at android.view.View.measure(View.java:8226) E/AndroidRuntime(15249): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132) E/AndroidRuntime(15249): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) E/AndroidRuntime(15249): at android.view.View.measure(View.java:8226) E/AndroidRuntime(15249): at android.widget.LinearLayout.measureVertical(LinearLayout.java:526) E/AndroidRuntime(15249): at android.widget.LinearLayout.onMeasure(LinearLayout.java:304) E/AndroidRuntime(15249): at android.view.View.measure(View.java:8226) E/AndroidRuntime(15249): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132) E/AndroidRuntime(15249): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245) E/AndroidRuntime(15249): at android.view.View.measure(View.java:8226) E/AndroidRuntime(15249): at android.view.ViewRoot.performTraversals(ViewRoot.java:801) E/AndroidRuntime(15249): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727) E/AndroidRuntime(15249): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(15249): at android.os.Looper.loop(Looper.java:123) E/AndroidRuntime(15249): at android.app.ActivityThread.main(ActivityThread.java:4627) E/AndroidRuntime(15249): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(15249): at java.lang.reflect.Method.invoke(Method.java:521) E/AndroidRuntime(15249): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) E/AndroidRuntime(15249): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) E/AndroidRuntime(15249): at dalvik.system.NativeStart.main(Native Method) W/ActivityManager( 2478): Force finishing activity it.tilab.carmaintenance/.CarMaintenance
Ciao e grazie a chi rispondera'
Sandro

Rispondi quotando