2013-02-27 15 views
8

Ecco il codice:Android - Spinner, onItemSelected (...) non essere chiamato

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.params.BasicHttpParams; 
import org.apache.http.params.HttpConnectionParams; 
import org.apache.http.params.HttpParams; 
import org.json.JSONArray; 
import org.json.JSONObject; 
import com.project.locationapp.model.Device; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.provider.Settings.Secure; 
import android.app.Activity; 
import android.content.Intent; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 


public class SelectDevice extends Activity implements OnItemSelectedListener { 

private Spinner deviceSpinner; 
private List<Device> deviceList; 
private ArrayAdapter<Device> deviceAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_select_device); 
    deviceList = new ArrayList<Device>(); 


    try { 
     deviceSpinner = (Spinner) findViewById(R.id.select_device_spinner); 
     deviceAdapter = new DeviceAdapter(this, android.R.layout.simple_spinner_dropdown_item, deviceList); 
     deviceSpinner.setAdapter(deviceAdapter); 
     deviceSpinner.setOnItemSelectedListener(this); 

     DataAsyncTask loadDevices = new DataAsyncTask(); 
     loadDevices.execute(new String[] { WebServiceURL.WEB_SERVICE + WebServiceURL.DEVICES + WebServiceURL.ALL }); 




    } catch (Exception e){ 
     Log.e(TAG, e.getLocalizedMessage(), e); 
    } 
} 

@Override 
public void onItemSelected(AdapterView<?> a, View v, int position, 
     long id) { 

    Log.d(TAG, "called!"); 
    Intent intent = new Intent(this, ViewTrips.class); 
    intent.putExtra("device_id", deviceAdapter.getItem(position).getId()); 
    startActivity(intent); 

} 
} 

classe DeviceAdapter:

import java.util.List; 
import com.project.locationapp.model.Device; 
import android.content.Context; 
import android.widget.ArrayAdapter; 

public class DeviceAdapter extends ArrayAdapter<Device> { 

public DeviceAdapter(Context context, int textViewResourceId, 
     List<Device> objects) { 
    super(context, textViewResourceId, objects); 
} 
} 

attività di layout xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".SelectDevice" > 


<TextView 
    android:id="@+id/instructions_device_select" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:text="@string/select_device_instructions" 
    android:layout_marginTop="10dp" 
    android:layout_marginBottom="10dp" 
    android:layout_marginRight="15dp" 
    android:layout_marginLeft="15dp" /> 

<Button 
    android:id="@+id/start_service_button" 
    android:layout_below="@id/instructions_device_select" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:onClick="thisDevice" 
    android:text="@string/this_device" 
    android:layout_marginTop="10dp" 
    android:layout_marginRight="40dp" 
    android:layout_marginLeft="40dp" /> 

<Spinner 
    android:id="@+id/select_device_spinner" 
    android:layout_below="@id/start_service_button" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:prompt="@string/select_device" 
    android:layout_marginTop="20dp" 
    android:layout_marginLeft="5dp" 
    android:drawSelectorOnTop = "true" /> 

</RelativeLayout> 

Sono in attesa di farlo funzionare correttamente, quindi ho intenzione di personalizzare ulteriormente DeviceAdapter.

Il Activity implements OnItemSelectedListener, quindi l'override di onItemSelected(...), che non viene chiamato affatto. Nessun errore in LogCat. Spinner è definito nel layout xml dell'attività e viene visualizzato e popolato correttamente. Qualsiasi consiglio per risolvere questo sarebbe fantastico.

Grazie.

+1

è onNothingSelected chiamato? – njzk2

+0

'catch (Exception e)' è una pessima pratica. Puoi rimuoverlo e riprovare. – m0skit0

+0

Ho rimosso try/catch, lo stesso problema e onNothingSelected non è chiamato né – user1610177

risposta

5

Potrebbe essere il layout degli spinner, posso vedere che non hai impostato una visualizzazione a discesa per l'adattatore. Puoi provare a inizializzare il tuo spinner in questo modo:

deviceAdapter = new DeviceAdapter(this, android.R.layout.simple_spinner_item, deviceList); 
deviceSpinner.setAdapter(deviceAdapter); 
deviceSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
deviceSpinner.setOnItemSelectedListener(this); 
+0

Questo ha migliorato un po 'le cose (come nella vista dello spinner quando è selezionato, tuttavia onItemSelezionato non è ancora chiamato – user1610177

+0

Hai scavalcato il metodo getView dell'arrayAdapter? Se sì, dovresti usare solo super.getView (BTW - viene chiamato onItemSelected quando si utilizza l'ArrayAdapter predefinito? – GTware

+0

Non ho sovrascritto il metodo getView() e onItemSelected non viene chiamato quando si utilizza l'ArrayAdapter predefinito (che era il motivo principale per cui ho creato il mio) – user1610177

Problemi correlati