自定义旋转适配器显示空列表

时间:2014-03-29 12:58:41

标签: android android-adapter

我已经创建了一个自定义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布局文件的引用的情况下这样做,这可能吗?如果没有,你能提供一个必要的布局文件的例子吗?

2 个答案:

答案 0 :(得分:1)

基本上,在你的getView方法中,你是以错误的方式膨胀视图。您希望通过创建LayoutInflater对象来对其进行充气,并使用其他示例显示对象进行充气。

答案 1 :(得分:0)

将“labels”参数传递给超级构造函数