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
.
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ę.
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.
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
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
I po naciśnięciu spinnera.
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;
}
}
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ę.
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