如何为Spinner的默认视图中显示的选项自定义/使用自定义布局



在我正在编写的应用程序中,我有一个整数列表,这些整数表示我用来制作Spinner的字符串资源ID。

我制作了一个自定义适配器,并设置了getDropDownView()来填充Spinner的下拉列表:

public View getDropDownView(int position, View convertView, ViewGroup parent) {
    int sortItem = getItem(position);
    ViewHolder viewHolder;
    if (convertView == null) {
        viewHolder = new ViewHolder();
        LayoutInflater inflater = LayoutInflater.from(getContext());
        convertView = inflater.inflate(R.layout.sort_item, parent, false);
        viewHolder.sortItemTv = (TextView) convertView.findViewById(R.id.sort_item_textview);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    viewHolder.sortItemTv.setText(convertView.getResources().getString(sortItem));
    return convertView;
}

这对下拉列表本身非常有效,但当下拉列表折叠时,实际的资源ID(一个整数)将显示在Spinner中。很明显,我想要的是字符串,而不是资源ID。有什么方法可以使用自定义布局或显示来改变这一点吗?我需要制作一个自定义Spinner吗?

您还必须实现getView

getView -> collapsedView
getDropDownView -> expanded items

想明白了。我将该方法更改为getCustomView方法,并从getView和getDropDownView返回该方法。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    return getCustomView(position, convertView, parent);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
    return getCustomView(position, convertView, parent);
}
public View getCustomView(int position, View convertView, ViewGroup parent) {
    int sortItem = getItem(position);
    ViewHolder viewHolder;
    if (convertView == null) {
        viewHolder = new ViewHolder();
        LayoutInflater inflater = LayoutInflater.from(getContext());
        convertView = inflater.inflate(R.layout.sort_item, parent, false);
        viewHolder.sortItemTv = (TextView) convertView.findViewById(R.id.sort_item_textview);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    viewHolder.sortItemTv.setText(convertView.getResources().getString(sortItem));
    return convertView;
}

最新更新