2013-02-27 22 views
8
genannt wird

Hier ist der Code:Android - Spinner, onItemSelected (...) nicht

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); 

} 
} 

DeviceAdapter Klasse:

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); 
} 
} 

Aktivität 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> 

Ich bin Warten Sie, bis das funktioniert, dann werde ich DeviceAdapter weiter anpassen.

Die Activity implements OnItemSelectedListener, daher die Überschreibung von onItemSelected(...), die überhaupt nicht aufgerufen wird. Keine Fehler in LogCat. Spinner ist im Layout xml der Aktivität definiert und wird angezeigt und gefüllt. Jeder Ratschlag, um das zu beheben, wäre großartig.

Vielen Dank.

+1

genannt wird onNothingSelected? – njzk2

+0

'catch (Exception e)' ist eine sehr schlechte Praxis. Können Sie das entfernen und es erneut versuchen? – m0skit0

+0

Ich habe versucht/catch, das gleiche Problem, und onNothingSelected wird weder – user1610177

Antwort

5

Es könnte die Spinner Layouts sein, kann ich sehen, Sie haben keine Dropdown-Ansicht für den Adapter festgelegt. Könnten Sie versuchen, Ihr Spinner wie diese zu initialisieren:

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

Das hat die Dinge ein wenig verbessert (wie in der Ansicht des Spinner, wenn es ausgewählt ist, aber onItemSelected wird immer noch nicht – user1610177

+0

Haben Sie die getView() - Methode des ArrayAdapter überschrieben? Wenn ja, sollten Sie nur super.getView () BTW - wird onItemSelected aufgerufen, wenn Sie den Standard-ArrayAdapter verwenden? – GTware

+0

Ich habe die getView() -Methode nicht überschrieben, und onItemSelected wird nicht aufgerufen, wenn der Standard-ArrayAdapter verwendet wird (was der Hauptgrund, warum ich meine eigene erstellte) – user1610177

Verwandte Themen