Разница между 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, где каждое представление значений можно настроить с помощью параметра convertViewgetDropDownView
- список значений, которые пользователь может выбрать после нажатия пользователем 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()
,вернуться другой вид, вы найдете разницу.