在覆盖ArrayAdapter
的 getDropDownView 方法时,我遇到了一种奇怪的行为。我需要覆盖此方法,以便从我的自定义对象中显示正确的字符串值。这就是我的阵列适配器的样子:
ArrayAdapter<NoteType> adapter = new ArrayAdapter<NoteType>(this, android.R.layout.simple_spinner_item, lstNoteTypes){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView lbl = (TextView) super.getView(position, convertView, parent);
lbl.setText(getItem(position).getName());
return lbl;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
TextView lbl = (TextView) super.getView(position, convertView, parent);
lbl.setText(getItem(position).getName());
return lbl;
}
};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
所以当我覆盖getDropDownView
时,我的Spinner看起来如下 - 项目高度非常小,这不是我想要的:
但是当我评论(或者不要覆盖)getDropDownView
方法时,它看起来没有默认样式,但是我无法将所需的文本值注入下拉项目。
请注意两个图片中项目的高度仅仅因为覆盖getDropDownView
。
有什么建议吗?或者我的代码中缺少什么?
答案 0 :(得分:2)
如果您自己编写NoteType,请覆盖其中的toString()。只需将以下内容添加到NoteType类:
@Override
public String toString() {
return getName();
}
答案 1 :(得分:2)
我认为我可能知道为什么会发生这种情况,但我必须对其进行测试,所以现在这是另一个(快速)解决方案。
由于Spinner
对toString()
中的每个对象ArrayAdapter
调用toString()
,您可以覆盖NoteType
课程中的toString()
方法并让它返回字符串(而不是默认的getDropDownView()
实现)。这样您就不必在适配器中覆盖{{1}},但仍然具有默认样式和数据。
答案 2 :(得分:1)
我遇到了自定义BaseAdapter类的同样问题。这在注释中也有提及,但解决方案实际上非常简单 - 只需在从getDropDownView方法返回的TextView中添加填充。
你不需要为此添加任何额外的文件,我没有使用ActionBarSherlock(只是默认的Spinner),所以我认为它与此无关。以下是适合我的代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Create custom TextView
TextView lbl = (TextView) super.getView(position, convertView, parent);
lbl.setText(getItem(position).getName());
// Add padding to the TextView, scaled to device
final float scale = context.getResources().getDisplayMetrics().density;
int px = (int) (10 * scale + 0.5f);
lbl.setPadding(px, px, px, px);
return lbl;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
// Create custom TextView
TextView lbl = (TextView) super.getView(position, convertView, parent);
lbl.setText(getItem(position).getName());
// Add padding to the TextView, scaled to device
final float scale = context.getResources().getDisplayMetrics().density;
int px = (int) (10 * scale + 0.5f);
lbl.setPadding(px, px, px, px);
return lbl
}
答案 3 :(得分:1)
必须做同样的事情,所以我自己的观点被用作checkedTextView
在这方面,最重要的是设置高度 的机器人:?layout_height =&#34; ATTR / dropdownListPreferredItemHeight&#34; 强> 我使用的是基础适配器