我想对微调器下拉列表使用不同的布局:一个用于普通视图(文本+图像),另一个用于下拉列表(仅文本)。
所以,一开始,我尝试了以下方法:
Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.item_title, R.id.text, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
很明显,因为第一个有一个图像,第二个只是一个TextView,我不能使用这个(总是抛出一个异常-NullPointerException)
因此,我为此创建了一个自定义的ArrayAdapter,它可以很好地处理布局,但出现了另一个问题:当我选择一个项目时,这个项目从下拉列表中消失,另一个项目取而代之。
例如,这是初始状态:
|item 1|
item 1
item 2
item 3
item 4
然后,我想选择项目4(选择后,下拉列表隐藏):
|item 4|
当我再次点击以选择另一个项目时,它显示为:
|item 4|
item 1
item 2
item 3
item 1
有人知道解决办法吗?我希望所有项目总是出现在下拉列表中(也没有重复)!
我在自定义适配器上遇到了这个问题,在我的情况下,解决方案是替换这个:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflator.inflate(R.layout.spinner_item, null);
ViewHolder holder= new ViewHolder();
holder.textTitle = (TextView) convertView.findViewById(R.id.textSpinnerItem);
holder.textTitle.setText(spinnerItems.get(position).getName());
holder.image = (ImageView) convertView.findViewById(R.id.imageSpinnerItem);
}
return convertView;
}
这样:(在某些情况下,当您单击下拉项时,convertView为空)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflator.inflate(R.layout.spinner_item, null);
}
ViewHolder holder= new ViewHolder();
holder.textTitle = (TextView) convertView.findViewById(R.id.textSpinnerItem);
holder.textTitle.setText(spinnerItems.get(position).getName());
holder.image = (ImageView) convertView.findViewById(R.id.imageSpinnerItem);
return convertView;
}
希望这能帮助