SpinnerAdapter中的getView和getDropDownView之间的区别

当你实现SpinnerAdapter的时候,你得到了getDropDownView ,它与getView不同之处在于,当你需要扩展BaseAdapter时候, getView BaseAdapter

如果我们看下面的代码,我们在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方法没有实现,popup的下拉菜单将从getView获取视图。 因此,它只会显示名称。

getView

当getView和getDropDownView被实现时,前者获取名称 ,后者获得 ,rest时的微调将从getview获得名称 ,下拉popup将获得getView和getDropDownView

接受的答案似乎有点复杂,所以为了简单起见

  • getView – 在用户按下微调器之前微调器上显示的值,其中每个值视图可以通过convertView参数进行调整

  • getDropDownView – 用户在按下微调器后可以select的值列表,其中列表中的每个值都可以使用convertView参数进行调整

getViewgetDropDownView可以显示不同的布局。

我创build一个微调,并使用class ImageTextAdapter extends ArrayAdapter<String>作为一个适配器。 我重写getView以便它可以显示ImageViewTextView 。 但是,我不重写getDropDownView

这是微调button之前的截图

在这里输入图像说明

并在微调器被按下后。

在这里输入图像说明

我用下面的代码初始化微调。

 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() ,返回不同的视图,你会发现差异。

在这里输入图像说明