【问题标题】:ArrayList<Object> adapter to SpinnerArrayList<Object> 适配器到 Spinner
【发布时间】:2012-11-21 19:33:42
【问题描述】:

我尝试了几种方法来做到这一点,我遵循了这个 -> 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 ....

我怎样才能做到这一点?我怎样才能个性化一个适配器来达到这个目的?提前致谢!

【问题讨论】:

  • 您基本上是在寻找带有分段适配器的ListView。有很多教程。
  • @Luksprog:类似的东西,但是是微调器形式?
  • 如果我没记错的话,Spinner 不支持不同的行类型,因此分段适配器不适用。但是,您可以使用第二个选项,将日期放在每一行中,并且只使用一种行类型(所有行都是可选的)。

标签: android spinner adapter


【解决方案1】:

编辑:

对不起,我想我现在明白你的想法了。我认为您想要的是将所有内容都放在 getDropDown 视图中。我还没有完全测试过这个,但你可以尝试一个 get 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 数组来告诉它何时关闭或不关闭。我得说,仅仅做一个展示似乎真的很重要,如果你认为这不值得,你可能想考虑妥协。

【讨论】:

    猜你喜欢
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2016-01-23
    • 1970-01-01
    相关资源
    最近更新 更多