Quando si implementa SpinnerAdapter si ottiene getDropDownView, in che cosa differisce da getView
cui si ha quando è necessario estendere BaseAdapter
.Differenza tra GetView & getDropDownView in SpinnerAdapter
risposta
Se osserviamo il seguente codice, abbiamo array di nomi e valori in getView e 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;
}
}
Se il metodo getDropDownView non è implementato, la finestra a comparsa mostrerà la vista da getView. Quindi, mostrerà solo il nome.
Quando viene implementato sia GetView e getDropDownView, l'ex ottenendo nome e la seconda ottenendo valore, il filatore a riposo otterrà nome dal GetView e discesa pop-up avranno valore.
La risposta accettata sembra un po 'complicato, quindi per semplicità
getView
- il valore visualizzato sul filatore prima che l'utente preme il filatore, dove ogni vista valore può essere regolato con la convertView parametrogetDropDownView
- elenco di valori l'utente può selezionare dopo l'utente preme il filatore, dove ogni valore nella lista può essere adattato con il parametro convertView
Sono 'View's, non valori. 'getView()' è per il singolo 'View' che si vede prima che 'Spinner' venga toccato. 'getDropDownView()' è per la pila verticale di 'View's che vedi quando si tocca il' Spinner'. Puoi utilizzare i due metodi per creare/popolare ciascuno dei due tipi di 'View's secondo le tue esigenze. –
getView
e getDropDownView
possono mostrare layout diversi.
Creo uno Spinner e utilizzo class ImageTextAdapter extends ArrayAdapter<String>
come adattatore. Eseguo l'override di getView
in modo che possa mostrare sia ImageView
e TextView
. Tuttavia, non sovrascrivo lo getDropDownView
.
Questo è uno screenshot prima che il filatore viene premuto
e dopo aver premuto il filatore.
ho inizializzare il filatore con il seguente codice.
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);
Ecco 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;
}
}
Grazie. Migliore risposta! –
Possiamo usare SpinnerAdapter come questo:
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()
e getDropDownView()
, ritorno diverso punto di vista, si trova la differenza.
possiamo ottenere vista a qui come semplice filatore? – stackoverflow
questo è quello che voglio, certo, grazie +1. –