在我正在编写的应用程序中,我有一个整数列表,这些整数表示我用来制作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;
}