2

Ich habe ein kleines Problem, wo mein Spinner nicht die Anwendung abstürzt, aber zur gleichen Zeit zeigt nicht meine benutzerdefinierte Adapter darin. Ich habe ewig nicht versucht zu sehen, wo das Problem ist, aber ich kann es immer noch nicht finden, kann jemand meinen Fehler erkennen?Android benutzerdefinierte Spinner-Adapter zeigt Inhalt nicht

Mein Adapter

public class AccomdationAdapter extends ArrayAdapter <String> { 

Context c; 
String[] roomType; 
int[] images; 





public AccomdationAdapter(Context ctx, String[] roomType, int[] images) { 

    super(ctx, R.layout.custom_room_spinner); 
    this.c=ctx; 
    this.roomType=roomType; 
    this.images=images; 






} 

@Override 
public View getDropDownView(int position, View convertView, ViewGroup parent) { 


    if(convertView==null){ 


     LayoutInflater inflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.custom_room_spinner,null); 


    } 

    TextView roomTypes = (TextView) convertView.findViewById(R.id.txtRoom); 
    ImageView roomIcon = (ImageView) convertView.findViewById(R.id.imgRoom); 

    //set data 
    roomTypes.setText(roomType[position]); 
    roomIcon.setImageResource(images[position]); 

    return convertView; 

} 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if(convertView==null){ 


     LayoutInflater inflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.custom_room_spinner,null); 


    } 

    TextView roomTypes = (TextView) convertView.findViewById(R.id.txtRoom); 
    ImageView roomIcon = (ImageView) convertView.findViewById(R.id.imgRoom); 

    //set data 
    roomTypes.setText(roomType[position]); 
    roomIcon.setImageResource(images[position]); 

    return convertView; 

} 


} 

Hauptaktivität

Spinner roomTypeSpinner; 

String[]roomType = {"Single", "Double"}; 
int[] roomimages = {R.drawable.ic_menu_camera, R.drawable.ic_menu_gallery}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 



    roomTypeSpinner = (Spinner) findViewById(R.id.spinner); 


    AccomdationAdapter adapter = new AccomdationAdapter(this, roomType, roomimages); 
    roomTypeSpinner.setAdapter(adapter); 

Individuelle Raum Spinner xml

<ImageView 
    android:layout_width="50dp" 
    android:layout_height="50dp" 
    android:id="@+id/imgRoom" 
    android:background="@drawable/abc_ic_star_black_16dp" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="Medium Text" 
    android:id="@+id/txtRoom" 
    android:layout_alignParentTop="true" 
    android:layout_toEndOf="@+id/imgRoom" 
    android:textSize="50dp" /> 
    </RelativeLayout> 

Inhalt Haupt

<Spinner 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/spinner" /> 
+0

rate ich würde das 'public int getCount()' Methode in Ihrem Adapter überschreiben, Rückkehr 'Zimmertyp .length' – NSimon

+0

Hallo Nicolas könnten Sie ein Beispiel geben – james

Antwort

2

Ihr Adapter bereits Methoden hat, fügen Sie einfach die getCount ein:

public class AccomdationAdapter extends ArrayAdapter <String> { 
    Context c; 
    String[] roomType; 
    int[] images; 
    @Override 
    public int getCount() { 
    return (roomType == null ? 0 : roomType.length); 
    } 
+1

Perfekte Antwort vielen Dank – james

0

In Ihrem benutzerdefinierten ArrayAdapter sollten Sie die Liste der Elemente übergeben, die in den Konstruktor super implementiert werden sollen. dies tun:

public AccomdationAdapter(Context ctx, String[] roomType, int[] images) { 

super(ctx, R.layout.custom_room_spinner,roomType); 
this.c=ctx; 
this.roomType=roomType; 
this.images=images; } 
+0

Eine weitere brillante Antwort – james