【问题标题】:Android : how to set DropDown View Resource for Spinner?Android:如何为 Spinner 设置下拉视图资源?
【发布时间】:2014-12-17 13:11:56
【问题描述】:

我为 Spinner 编写了一个代码,用于在 Android 中将 USA States 数组与 Spinner 绑定。但问题是它在 Spinner 项中显示引用类型数据,请参见图片

我添加了android.R.layout.simple_spinner_dropdown_item,但不知道在布局中添加什么。我在 google 上查看了许多示例,他们添加了 simple_spinner_dropdown_item,但我找不到要在布局中添加的内容。下面是输出和代码。我想在列表中显示状态而不是这些垃圾数据。

    Spinner spStates = new Spinner(this);
        spStates.setLayoutParams(new LayoutParams(screenWidth, LayoutParams.WRAP_CONTENT));

        final USAStates states[] = new USAStates[51];

        states[0] = new USAStates("Alabama", "AL");
        states[1] = new USAStates("Alaska", "AK");
        states[2] = new USAStates("Arizona", "AZ");
ArrayAdapter<USAStates> adapter = new ArrayAdapter<USAStates>(this, android.R.layout.simple_spinner_item, states);

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spStates.setAdapter(adapter);
        spStates.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                USAStates d = states[position];
                Toast.makeText(getApplicationContext(), d.getStateAbrivation(), Toast.LENGTH_LONG).show();

            }

            public void onNothingSelected(AdapterView<?> parent) {
            }
        });




public class USAStates {
        private String _Statename;
        private String _StateAbrivation;

        public USAStates(String pStatename, String pStateAbrivation) {
            Statename(pStatename);
            StateAbrivation(pStateAbrivation);
        }
        public void Statename(String pStatename) {
            _Statename = pStatename;
        }
        public void StateAbrivation(String pStateAbrivation) {
            _StateAbrivation = pStateAbrivation;
        }

        public String getStatename() {
            return _Statename;
        }
        public String getStateAbrivation() {
            return _StateAbrivation;
        }
    }

【问题讨论】:

    标签: java android spinner


    【解决方案1】:

    不确定,只是在我的脑海中这样做,但是,在你的 USAState 类中覆盖你的 toString 方法。因为它可能是适配器使用默认的 toString() 因此你奇怪的文本显示(我假设是USAStates 类的类名)

    例如

    @Override
    public String toString(){
    return _Statename
    }
    

    【讨论】:

      【解决方案2】:

      我最初接受了toString() 的答案,但后来发现这似乎不对。

      我有一个带有微调器/下拉列表的 ActionBar,并且我的适配器项使用 String.toString() 值呈现,而不是我在自定义适配器中设置的标题。添加toString() 最初确实修复了,直到我尝试在同一布局中设置复合可绘制对象。

      我需要在我的适配器中覆盖 getDropDownViewgetView

      必须覆盖toString() 表明您没有覆盖适配器中的正确方法。

      当覆盖 getDropDownView 时,不再需要覆盖 toString(),一切都按预期工作。

      下面帖子中的答案是使用 super 方法实现的好方法: alternating colors of spinner items

      【讨论】:

        猜你喜欢
        • 2010-12-27
        • 2017-02-03
        • 1970-01-01
        • 2014-11-20
        • 1970-01-01
        • 2014-01-03
        • 2016-12-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多