Spinner Dropdown使用自定义ArrayAdapter的奇怪行为(点击后重复项目)(Android)



我想对微调器下拉列表使用不同的布局:一个用于普通视图(文本+图像),另一个用于下拉列表(仅文本)。

所以,一开始,我尝试了以下方法:

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;
}

希望这能帮助

最新更新