Android:如何为Spinner设置DropDown View Resource?

时间:2012-01-14 11:08:55

标签: java android spinner

我为Spinner编写了一个代码,用于在Android中使用Spinner绑定美国各州的数组。但问题是它在Spinner项目中显示引用类型数据,请参见图片

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

enter image description here

    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;
        }
    }

2 个答案:

答案 0 :(得分:2)

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

例如

@Override
public String toString(){
return _Statename
}

答案 1 :(得分:0)

我最初接受toString()回答,但后来发现这似乎不正确。

我有一个带有微调器/下拉列表的ActionBar,我的适配器项目使用String.toString()值而不是我在自定义适配器中设置的标题。添加toString()最初修复,直到我尝试在同一布局中设置复合drawable。

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

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

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

以下帖子的答案是使用super方法实现的一种很好的方法: alternating colors of spinner items