web-dev-qa-db-fra.com

Différence entre getView et getDropDownView dans SpinnerAdapter

Lorsque vous implémentez SpinnerAdapter, vous obtenez getDropDownView , en quoi diffère-t-il de getView dont vous disposez lorsque vous devez étendre BaseAdapter.

60
Win Myo Htet

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.

getView

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 valeurgetView and getDropDownView

56
Win Myo Htet

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

51
Lou Morda

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

enter image description here

et après que le spinner est pressé.

enter image description here

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

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.

enter image description here

3
Ado