Lorsque vous implémentez SpinnerAdapter, vous obtenez getDropDownView , en quoi diffère-t-il de getView
dont vous disposez lorsque vous devez étendre BaseAdapter
.
Si nous regardons le code suivant, nous avons un tableau de noms et de valeurs dans getView et getDropDownView.
private void initView() {
SpinnerDropDownAdapter sddadapter = new SpinnerDropDownAdapter(this);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
Android.R.layout.simple_spinner_item, sddadapter.name);
Spinner getViewSP = (Spinner) findViewById(R.id.getview_sp);
getViewSP.setAdapter(adapter);
Spinner getViewWDropDownSP = (Spinner) findViewById(R.id.getview_w_drop_down_sp);
getViewWDropDownSP.setAdapter(sddadapter);
}
static class SpinnerDropDownAdapter extends BaseAdapter implements
SpinnerAdapter {
Context context;
SpinnerDropDownAdapter(Context ctx) {
context = ctx;
}
String[] name = { " One", " Two", " Three", " Four", " Five", " Six",
" Seven", " Eight" };
String[] value = { " 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8" };
@Override
public int getCount() {
return name.length;
}
@Override
public String getItem(int pos) {
// TODO Auto-generated method stub
return name[pos];
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView text = new TextView(context);
text.setTextColor(Color.BLACK);
text.setText(name[position]);
return text;
}
@Override
public View getDropDownView(int position, View convertView,
ViewGroup parent) {
TextView text = new TextView(context);
text.setTextColor(Color.BLACK);
text.setText(value[position]);
return text;
}
}
Si la méthode getDropDownView n'est pas implémentée, la liste déroulante obtiendra la vue de getView. Ainsi, il affichera uniquement le nom.
Lorsque getView et getDropDownView sont implémentés, le premier obtenant nom et le second obtenant valeur, le spinner au repos recevra nom de getview et le déroulant pop-up obtiendra valeur.
La réponse acceptée semble un peu compliquée, donc pour plus de simplicité
getView
- la valeur affichée sur le spinner avant que l'utilisateur appuie sur le spinner, où chaque vue de valeur peut être ajustée avec le paramètre convertView
getDropDownView
- liste de valeurs que l'utilisateur peut sélectionner après avoir appuyé sur le bouton rotatif, où chaque valeur de la liste peut être adaptée avec le paramètre convertView
getView
et getDropDownView
peuvent afficher une disposition différente.
Je crée un Spinner et j'utilise class ImageTextAdapter extends ArrayAdapter<String>
comme adaptateur. Je remplace getView
afin qu'il puisse afficher à la fois ImageView
et TextView
. Cependant, je ne remplace pas getDropDownView
.
Ceci est une capture d'écran avant d'appuyer sur le spinner
et après que le spinner est pressé.
J'initialise le spinner avec le code suivant.
String[] spinnerTexts = {"Tanzania", "Thailand"};
int[] spinnerImages = {R.drawable.tanzania, R.drawable.thailand};
ArrayAdapter<String> adapter = new ImageTextAdapter(this, spinnerTexts, spinnerImages);
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(adapter);
Voici ImageTextAdapter.Java
public class ImageTextAdapter extends ArrayAdapter<String> {
int[] images;
public ImageTextAdapter(Context ctx, String[] texts, int[] images) {
super(ctx, Android.R.layout.simple_spinner_item, texts);
this.images = images;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = getLayoutInflater().inflate(R.layout.row, parent, false);
TextView textView = (TextView) row.findViewById(R.id.textView);
textView.setText(getItem(position));
ImageView imageView = (ImageView) row.findViewById(R.id.imageView);
imageView.setImageResource(images[position]);
return row;
}
}
Nous pouvons utiliser SpinnerAdapter comme ceci:
public class FolderSpinnerAdpater extends BaseAdapter implements SpinnerAdapter {
@Override
public int getCount() {
return 0;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return null;
}
}
Dans BaseAdapter.Java
public View getDropDownView(int position, View convertView, ViewGroup parent) {
return getView(position, convertView, parent);
}
Remplacez getView()
et getDropDownView()
, retourne une vue différente, vous trouverez la différence.