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和getDropDownView被实现时,前者获取名称 ,后者获得值 ,rest时的微调将从getview获得名称 ,下拉popup将获得值 。
接受的答案似乎有点复杂,所以为了简单起见
-
getView
– 在用户按下微调器之前微调器上显示的值,其中每个值视图可以通过convertView参数进行调整 -
getDropDownView
– 用户在按下微调器后可以select的值列表,其中列表中的每个值都可以使用convertView参数进行调整
getView
和getDropDownView
可以显示不同的布局。
我创build一个微调,并使用class ImageTextAdapter extends ArrayAdapter<String>
作为一个适配器。 我重写getView
以便它可以显示ImageView
和TextView
。 但是,我不重写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()
,返回不同的视图,你会发现差异。