Разница между getView & getDropDownView в SpinnerAdapter
при реализации SpinnerAdapter вы получаете getDropDownView, чем он отличается от getView
который у вас есть, когда вам нужно расширить BaseAdapter
.
4 ответа:
Если мы посмотрим на следующий код, у нас есть имя и значение массива в getView и 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; } }
Если метод getDropDownView не реализован, выпадающее всплывающее окно получит представление из getView. Таким образом, он будет показывать только имя.
когда реализованы оба getView и getDropDownView, первый получает имя и последний получает стоимостью, спиннер в состоянии покоя получит имя из getview и выпадающего всплывающего окна будет получить стоимостью.
принятый ответ, кажется, немного сложнее, поэтому для простоты
getView
- значение, показанное на спиннере до того, как пользователь нажмет кнопку spinner, где каждый вид значения можно настроить с помощью параметра convertView
getDropDownView
- список значений, которые пользователь может выбрать после нажатия кнопки spinner, где каждое значение в списке может быть адаптировано с помощью параметра convertView
getView
иgetDropDownView
может показать другой расклад.Я создаю спиннер и использую
class ImageTextAdapter extends ArrayAdapter<String>
в качестве адаптера. Я переопределяюgetView
, Так что он может показать какImageView
иTextView
. Однако я не переопределяюgetDropDownView
.это скриншот перед нажатием блесны
и после того, как спиннер нажата.
Я инициализирую счетчик с помощью следующий код.
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);
вот 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; } }
мы можем использовать SpinnerAdapter следующим образом:
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; } }
В BaseAdapter.java
public View getDropDownView(int position, View convertView, ViewGroup parent) { return getView(position, convertView, parent); }
переопределить
getView()
иgetDropDownView()
,вернуть другой вид, вы найдете разницу.