2012-01-14 125 views
0

我为Spinner编写了一个代码,将Android的Spinner绑定到美国国家的数组。但问题是,它显示了在转项引用类型的数据,请参见PICAndroid:如何为Spinner设置DropDown查看资源?

我添加android.R.layout.simple_spinner_dropdown_item,但不知道该怎么布局添加。我查了谷歌很多exemples他们添加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

不知道,只是这样做了我的头顶部,但在你的USAState类中重写你的toString method.As是它也许适配器使用默认的toString(),因此您怪异的文字显示(这我相信是USAStates类的类名)

例如

@Override 
public String toString(){ 
return _Statename 
} 
0

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

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

我需要重写我的适配器getDropDownView以及getView

不必重写toString()是有症状的,你有没有覆盖在您的适配器正确的方法。

当重写不必重写toString() getDropDownView不再需要,一切都按预期工作。

而以下职位的答案是采用了超方法来实现一个伟大的方式: alternating colors of spinner items