2012-01-14 126 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