Różnica między getView i getDropDownView w SpinnerAdapter

Po zaimplementowaniu SpinnerAdapter otrzymujesz getDropDownView , Czym różni się od getView, które masz, gdy musisz rozszerzyć BaseAdapter.

Author: Mahdi Alkhatib, 2012-11-17

4 answers

Jeśli spojrzymy na poniższy kod, mamy tablicę nazw i wartości w getView i 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;
    }
}

Jeśli metoda getDropDownView nie jest zaimplementowana, rozwijane wyskakujące okienko spowoduje pobranie widoku z getView. W ten sposób pokaże tylko nazwę.

getView

Gdy zarówno getView, jak i getDropDownView są zaimplementowane, pierwszy otrzymuje nazwę , a drugi otrzymuje wartość , spinner w spoczynku otrzyma nazwę z getview, a rozwijane wyskakujące okienko otrzyma get value. getView i getDropDownView

 54
Author: Win Myo Htet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-17 19:13:00

Przyjęta odpowiedź wydaje się trochę skomplikowana, więc dla uproszczenia

  • getView - wartość pokazana na przędzarce przed naciśnięciem przez użytkownika spinner, gdzie każdy widok wartości może być regulowany za pomocą parametru convertView

  • getDropDownView - Lista wartości, które użytkownik może wybrać po naciśnięciu spinnera, gdzie każda wartość na liście może być dostosowana parametrem convertView

 45
Author: Lou Morda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-30 10:47:47

getView i getDropDownView może pokazać inny układ.

Tworzę Spinner i używam class ImageTextAdapter extends ArrayAdapter<String> jako adaptera. Nadpisuję getView tak, aby mogła pokazać zarówno ImageView, jak i TextView. Jednak nie nadpisuję getDropDownView.

To jest zrzut ekranu przed naciśnięciem spinnera

Tutaj wpisz opis obrazka

I po naciśnięciu spinnera.

Tutaj wpisz opis obrazka

Inicjalizuję spinner poniższym kodem.

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);

Oto 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
Author: wannik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-17 13:20:47

Możemy użyć SpinnerAdapter Tak:

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

In BaseAdapter.java

public View getDropDownView(int position, View convertView, ViewGroup parent) {
    return getView(position, convertView, parent);
}

Override getView() i getDropDownView(), zwróć inny widok, znajdziesz różnicę.

Tutaj wpisz opis obrazka

 1
Author: Ado,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-30 04:36:41