ArrayList <object>适配器到Spinner </object>

时间:2012-11-21 19:33:42

标签: android spinner adapter

我已经尝试了几种方法来实现这一点,我遵循了这一点 - &gt; Android Spinner databind using array list回答,但我的对象里面有一个ArrayList。 整个事情是一个ArrayList,其中Object有自己的列表。

如何正确显示此信息?这个类中的另一个领域是我不想选择的东西,只是内部的arraylist。类定义将使一切清晰:

public class Horario{
    private String fecha;
    private ArrayList<String> hora;

    public Horario(String _fecha, ArrayList<String> _hora){
        fecha=_fecha;
        hora = _hora;
    }

    public Horario(){}

    public void setFecha(String _fecha){
        fecha = _fecha;
    }
    public void setHora(ArrayList<String> _hora){
        hora=_hora;
    }

    public String getFecha(){
        return fecha;
    }
    public ArrayList<String> getHora(){
        return hora;
    }
}

这是一个日程表的类,日期(fecha)是我不想选择的,小时(hora)是。我想这是一个带有类别(日期)和一组可点击项目(小时)的下拉菜单。

Date1
    hour 1
    hour 2
    hour 3
Date2
    hour 1

如果这很困难/不可能,那么我想在每个旋转器选项中列出日期+小时。

Date1 - hour 1
Date1 - hour 2
Date1 - hour 3 ....

我怎样才能做到这一点?我如何个性化适配器才能实现这一目标?提前谢谢!

1 个答案:

答案 0 :(得分:1)

修改

我道歉,我想我明白你现在的想法。我认为你想要的是getDropDown视图中的所有内容。我还没有完全测试过这个,但你可以尝试使用不同的布局来获取DropDownView,具体取决于你想为它指定一个标记。踢球者是这个自定义布局有一个显示没有区别的选择器xml。

public class HorarioArrayAdapter extends ArrayAdapter {

    private Horario horario;

    public HorarioArrayAdapter(Context context, int textViewResourceId, Horario horario) {
        super(context, textViewResourceId);
        this.horario = horario;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO whatever you had in mind
        return super.getView(position, convertView, parent);
    }


    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        View v;
        if (// marker at this position says something) {
            LayoutInflater viewInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = viewInflater.inflate(R.layout.custom_spinner_row, parent, false);   

            TextView text = (TextView) v.findViewById(R.id.txt_date);
            text.setText(horario.getHora().get(position));          
        } else {
            View v = super.getDropDownView(position, convertView, parent);
            TextView text = (TextView) v.findViewById(android.R.id.text1);
            text.setText(horario.getHora().get(position));              
        }
        return v;       
    }

}

但是,如果这些位置被点击,那么微调器就不会做任何事情,因为甚至没有关闭。您可能需要为int position数组创建一个自定义微调器,以告诉它何时关闭或不关闭。我必须说它似乎真的只是做一个显示器,你可能想考虑妥协,如果你不认为这是值得的。