自定义微调器下拉列表显示第一次从底部开始的数据

时间:2015-01-30 14:18:50

标签: android custom-controls android-spinner

我创建了一个微调器并使用自定义适配器设置数据。在那种情况下,如果我点击微调器,我会从底部开始下拉。我需要从顶部开始下拉。

我收到此问题,如图片

所示

enter image description here

如图所示,当我第一次点击微调器时,数据从底部开始。

我需要从顶部获取数据。

我的代码:

微调器和适配器设置

listCtcLakhs = new ArrayList<String>();


        listCtcLakhs.add("25");
        listCtcLakhs.add("30");
        listCtcLakhs.add("35");
        listCtcLakhs.add("40");
        listCtcLakhs.add("45");
        listCtcLakhs.add("50");
        listCtcLakhs.add("60");
        listCtcLakhs.add("70");
        listCtcLakhs.add("80");
        listCtcLakhs.add("90");
        listCtcLakhs.add("100");
        listCtcLakhs.add("110");
        listCtcLakhs.add("120");
        listCtcLakhs.add("150");
        listCtcLakhs.add("Lacs");

        spForCtcLakhs
                .setAdapter(new SpinnerAdapter(getActivity(), listCtcLakhs));

        spForCtcLakhs.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                view.findViewById(R.id.iconDropDown)
                        .setVisibility(View.VISIBLE);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
        spForCtcLakhs.setSelection(listCtcLakhs.size() - 1);

适配器代码

public class SpinnerAdapter extends BaseAdapter {

    Context mContext;
    ArrayList<String> dropDownList;

    public SpinnerAdapter(Context context, ArrayList<String> studentList) {
        this.mContext = context;
        this.dropDownList = studentList;

    }

    @Override
    public int getCount() {
        if(dropDownList.size()>1){


            return dropDownList.size()-1;
        }
        return dropDownList.size();

    }

    @Override
    public Object getItem(int arg0) {
        return dropDownList.get(arg0);
    }

    @Override
    public long getItemId(int arg0) {
        return arg0;
    }

    private class ViewHolder {

        TextView txtMenu;
        ImageView ivDropDown;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        ViewHolder holder = null;
        if (view == null) {

            LayoutInflater layoutInflater = (LayoutInflater) mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            holder = new ViewHolder();

            view = layoutInflater.inflate(R.layout.highest_qulifi_layout,
                    parent, false);

            holder.txtMenu = (TextView) view
                    .findViewById(R.id.highest_quilification_textview);

            holder.ivDropDown = (ImageView) view
                    .findViewById(R.id.iconDropDown);

            view.setTag(holder);

        } else {
            holder = (ViewHolder) view.getTag();
        }

        try {

            String name = dropDownList.get(position);
            // set hint
            if (position == getCount()) {
                holder.ivDropDown.setVisibility(View.VISIBLE);
                holder.txtMenu.setText(name);
            }

            // Set data
            else {

                holder.txtMenu.setText(name);
            }


        } catch (IndexOutOfBoundsException e) {
            e.printStackTrace();
        }

        return view;
    }

}

我尝试了很多方法,但我无法在列表顶部设置提示(在列表提示位于底部,我使用setSelection()设置)。因此,它不会成为最重要的。

如果有人有任何其他办法可以帮助我,请帮助我。

1 个答案:

答案 0 :(得分:0)

默认情况下,下拉列表开始显示所选项目中的下一项。我相信你需要创建一个CustomSpinner类来覆盖Spinner类中确定下拉列表显示内容的方法。另一个答案here包含一个非常明确的可能实现示例。