Comment remplir dynamiquement Android spinner avec du texte + image
C'est ce que je suis en train de réaliser je suis en mesure de réaliser cela:
J'ai été en mesure d'ajouter du texte et de l'image pour un Spinner, mais les images ne s'affichent pas dans le menu déroulant à côté du texte. Sa ne s'affiche que pour l'élément sélectionné de la spinner.
Voici mon code:
spinner_layout.xml
La mise en page contenant les principaux Spinner.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Spinner android:id="@+id/mySpinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
spinner_value_layout.xml
La disposition des éléments dans la casserole. Ce sera gonflé à l'aide d'un Adaptateur.
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/spinnerTextView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/spinnerImages"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/app_name"/>"
</TableRow>
</TableLayout>
SpinnerActivity.java
package com.example.spinner;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import com.example.tempspinner.R;
public class SpinnerActivity extends Activity {
String[] textArray = { "clouds", "mark", "techcrunch", "times" };
Integer[] imageArray = { R.drawable.clouds, R.drawable.mark,
R.drawable.techcrunch, R.drawable.times };
@Override
protected void onCreate(Bundle savedInstanceState) {
//TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.spinner_layout);
TextView text = (TextView) findViewById(R.id.spinnerTextView);
ImageView imageView =(ImageView)findViewById(R.id.spinnerImages);
Spinner spinner = (Spinner) findViewById(R.id.mySpinner);
SpinnerAdapter adapter = new SpinnerAdapter(this, R.layout.spinner_value_layout, textArray, imageArray);
spinner.setAdapter(adapter);
}
}
SpinnerAdapter.java
package com.example.spinner;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.tempspinner.R;
public class SpinnerAdapter extends ArrayAdapter<String> {
private Context ctx;
private String[] contentArray;
private Integer[] imageArray;
public SpinnerAdapter(Context context, int resource, String[] objects,
Integer[] imageArray) {
super(context, R.layout.spinner_value_layout, R.id.spinnerTextView, objects);
this.ctx = context;
this.contentArray = objects;
this.imageArray = imageArray;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.spinner_value_layout, null);
}
TextView textView = (TextView) convertView.findViewById(R.id.spinnerTextView);
textView.setText(contentArray[position]);
ImageView imageView = (ImageView)convertView.findViewById(R.id.spinnerImages);
imageView.setImageResource(imageArray[position]);
return convertView;
}
}
je vous remercie pour cette question, m'a beaucoup servi!
OriginalL'auteur Ash Ash | 2014-06-26
Vous devez vous connecter pour publier un commentaire.
Essayer..
Vous avez créé uniquement dans la vue de l'élément sélectionné pas pour DropDownView. J'ai ajouté ce point de vue qui affiche
Ne semble pas fonctionner pour moi, getDropDownView(), getView() n'a jamais appelée pour quelque raison que dans mon scénario, donc getCustomView() n'est jamais appelée. Aucune idée pourquoi? merci.
Rapide mise à jour, j'ai résolu mon problème décrit ci-dessus. Exemple fonctionne très bien - merci de poster 🙂
Je souhaite que je pourrais up-vote de votre réponse, plus d'une fois. J'ai été me frappant la tête contre le mur sur exactement le même problème depuis une semaine maintenant. Je suis en utilisant une mesure
SimpleCurosrAdapter
au lieu d'uneArrayAdapter
, mais votre méthode a fonctionné pour mon cas. Merci encore, et bonne journée!OriginalL'auteur Hariharan
Essayer cette
Créer une nouvelle mise en page à l'intérieur de res/layout/ avec n'importe quel nom par exemple spinner_value_layout.xml
Créer une nouvelle classe SimpleImageArrayAdapter
et enfin à utiliser à votre classe où vous êtes de passage id de spinner
De sortie:-
OriginalL'auteur Sunil
Spinner row.xml Vous pouvez supprimer mon inutile drawable des styles et des images
De l'activité mise en page act_add_new_prog.xml
Classe D'Activité
ItemModel pour chaque ligne
Et L'Adaptateur Classe
OriginalL'auteur Sam