【问题标题】:Custom spinner drop-down showing data from bottom first time自定义微调器下拉菜单首次显示底部数据
【发布时间】:2015-01-30 14:18:49
【问题描述】:

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

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

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

我需要从顶部获取数据。

我的代码:

微调器和适配器设置

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

如果有人有其他方法来做这件事,请帮助我。

【问题讨论】:

    标签: android custom-controls android-spinner


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多