Android spinner pokazujący odniesienie do obiektu zamiast łańcucha
Ok, więc mam problem z moim spinnerem. Jest wypełniany danymi pobranymi z usługi internetowej. Problem polega na tym, że gdy pokrętło nie jest klikane, zamiast pokazywać łańcuch dla pierwszego elementu w pokrętle, pokazuje zamiast niego odniesienie do obiektu.
Przyjrzałem się pokrewnemu pytaniu, ale wciąż nie widziałem, czego mi brakuje, czy to tak proste, jak brak referencji toString?
Oto kod do wypełnienia błystki
private void buildDrinkDropDown() {
List<NameValuePair> apiParams = new ArrayList<NameValuePair>(1);
apiParams.add(new BasicNameValuePair("call", "drinkList"));
bgt = new BackGroundTask(MAP_API_URL, "GET", apiParams);
try {
JSONArray drinks = bgt.execute().get();
for (int i = 0; i < drinks.length(); i++) {
JSONObject d = drinks.getJSONObject(i);
String id = d.getString(TAG_ID_DRINK);
String createdAt = d.getString(TAG_CREATED_AT);
String updatedAt = d.getString(TAG_UPDATED_AT);
String price = d.getString(TAG_PRICE);
String name = d.getString(TAG_NAME);
drinkList.add(new Drink( createdAt ,id, name, price,updatedAt ));
}
drinkField = (Spinner) findViewById(R.id.countryField);
DrinkAdapter dAdapter = new DrinkAdapter(this, android.R.layout.simple_spinner_item, drinkList);
drinkField.setAdapter(dAdapter);
drinkField.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//Drink selectedDrink = drinkList.get(position);
GlobalDrinkSelected = drinkList.get(position).getId().toString();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
});
} catch (JSONException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
Oto kod klasy adaptera
package com.android.main;
import java.util.ArrayList;
import android.app.Activity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class DrinkAdapter extends ArrayAdapter<Drink>
{
private Activity context;
ArrayList<Drink> data = null;
public DrinkAdapter(Activity context, int resource, ArrayList<Drink> data)
{
super(context, resource, data);
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{ // Ordinary view in Spinner, we use android.R.layout.simple_spinner_item
return super.getView(position, convertView, parent);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent)
{ // This view starts when we click the spinner.
View row = convertView;
if(row == null)
{
LayoutInflater inflater = context.getLayoutInflater();
row = inflater.inflate(R.layout.dropdown_value_id, parent, false);
}
Drink item = data.get(position);
String test = item.getName();
Log.d("test ", test);
if(item != null)
{
TextView drinkName = (TextView) row.findViewById(R.id.item_value);
if(drinkName != null){
drinkName.setText(item.getName());
Log.d("find me ", drinkName.toString());
}
}
return row;
}
}
Oto xml dla układu dropdown_value_id używanego w adapterze
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/item_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
Jeśli potrzebujesz więcej informacji, po prostu krzycz.
Każda pomoc byłaby bardzo doceniona
Edytuj: zrzut ekranu