我已经创建了一个自定义ArrayAdapter,以我想要的方式在Spinner中显示文本。但是在运行程序时,微调器列表显示为空。
这是我的代码:
public static class CustomAdapter extends ArrayAdapter<String> {
private int fontsize;
private int color;
private Typeface typeface;
private int bgcolor = Color.rgb(50, 50, 50);
private int selectedColor = Color.rgb(50, 50, 50);
private int selected = -1;
private List<String> data;
public CustomAdapter(Context context, int resource, Typeface tf, int colour, int fsize, List<String> labels) {
super(context, resource);
fontsize = fsize;
color = colour;
typeface = tf;
data = labels;
}
public void setBackgroundColor(int bg){
bgcolor = bg;
}
public void setSelectedColor(int color){selectedColor = color;}
public void setSelectedPos(int p){
selected = p;
notifyDataSetChanged();
}
public View getView(int position, View convertView, ViewGroup parent) {
TextView v = (TextView)super.getView(position, convertView, parent);
SpannableStringBuilder texter = new SpannableStringBuilder();
Aux.addText(texter,data.get(position),color,fontsize,typeface);
if (v != null) {
v.setLayoutParams(new ViewGroup.LayoutParams(100, 100));
v.setText(texter, TextView.BufferType.SPANNABLE);
//v.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
if (position == selected) v.setBackgroundColor(selectedColor);
else v.setBackgroundColor(bgcolor);
}
return v;
}
public View getDropDownView(int position, View convertView, ViewGroup parent) {
TextView v = (TextView)super.getDropDownView(position, convertView, parent);
SpannableStringBuilder texter = new SpannableStringBuilder();
Aux.addText(texter, data.get(position), color, fontsize, typeface);
if (v != null) {
v.setLayoutParams(new ViewGroup.LayoutParams(100, 100));
v.setText(texter, TextView.BufferType.SPANNABLE);
if (position == selected) v.setBackgroundColor(selectedColor);
else v.setBackgroundColor(bgcolor);
}
return v;
}
}
我找到了一个有完全相同问题的人,但是我无法理解解决方案中的代码以便自己实现它(这里:Custom Spinner Adapter)从我的讲述中我似乎有布局问题,但是我不明白代码中的变量make,v和row之间的关系是什么。
另外我想在不使用xml布局文件的引用的情况下这样做,这可能吗?如果没有,你能提供一个必要的布局文件的例子吗?
答案 0 :(得分:1)
基本上,在你的getView方法中,你是以错误的方式膨胀视图。您希望通过创建LayoutInflater对象来对其进行充气,并使用其他示例显示对象进行充气。
答案 1 :(得分:0)
将“labels”参数传递给超级构造函数