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

Custom spinner drop-down showing data from bottom first time

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

我遇到了这个问题,如图所示

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

我需要从顶部获取数据。

我的代码:

微调器和适配器设置

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() 设置)。因此它没有排在首位。

如果有人有任何其他方法可以做到这一点,请帮助我。

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