ID #58861

listView中扩展ArrayAdapter,以及view的使用

    我们主要讲的就是listview扩展到arrayadapter这里我们用到恶劣ListActivity。我们又从新做了一个方法getView()。在这里面判断一下convertview等于空。我们在写一个方法是onnothingselected。在里面我们在判断一下lastRow不等于空。下面我们就来看看代码吧:

Java代码
  1. public class SelectorDemo extends ListActivity {   
  2. private static ColorStateList allWhite=ColorStateList.valueOf(0xFFFF0000);   
  3. private static String[] items={"lorem""ipsum""dolor","purus"};   
  4.   
  5. @Override  
  6. public void onCreate(Bundle icicle) {   
  7. super.onCreate(icicle);   
  8. setContentView(R.layout.main);   
  9. setListAdapter(new SelectorAdapter(this));   
  10. getListView().setOnItemSelectedListener(listener);   
  11. }   
  12.   
  13. class SelectorAdapter extends ArrayAdapter {   
  14. SelectorAdapter(Context ctxt) {   
  15. super(ctxt,R.layout.row, items);   
  16.   
  17. }   
  18.   
  19. @Override  
  20. public View getView(int position, View convertView,ViewGroup parent) {   
  21. SelectorWrapper wrapper=null;   
  22.   
  23. if (convertView==null) {   
  24. convertView=getLayoutInflater().inflate(R.layout.row,parent, false);   
  25. wrapper=new SelectorWrapper(convertView);   
  26. wrapper.getLabel().setTextColor(allWhite);   
  27. convertView.setTag(wrapper);   
  28. }   
  29. else {   
  30. wrapper=(SelectorWrapper)convertView.getTag();   
  31. }   
  32.   
  33. wrapper.getLabel().setText(items[position]);   
  34.   
  35. return(convertView);   
  36. }   
  37. }   
  38.   
  39. class SelectorWrapper {   
  40. View row=null;   
  41. TextView label=null;   
  42. View bar=null;   
  43.   
  44. SelectorWrapper(View row) {   
  45. this.row=row;   
  46. }   
  47.   
  48. TextView getLabel() {   
  49. if (label==null) {   
  50. label=(TextView)row.findViewById(R.id.label);   
  51. }   
  52.   
  53. return(label);   
  54. }   
  55.   
  56. View getBar() {   
  57. if (bar==null) {   
  58. bar=row.findViewById(R.id.bar);   
  59. }   
  60.   
  61. return(bar);   
  62. }   
  63. }   
  64.   
  65. AdapterView.OnItemSelectedListener listener=new AdapterView.OnItemSelectedListener() {   
  66. View lastRow=null;   
  67.   
  68. public void onItemSelected(AdapterView<?> parent, View view, int position,   
  69. long id) {   
  70. Log.i("view","parent:"+parent+"view:"+view+position);   
  71.   
  72. if (lastRow!=null) {   
  73. SelectorWrapper wrapper=(SelectorWrapper)lastRow.getTag();   
  74.   
  75. wrapper.getBar().setVisibility(View.INVISIBLE);   
  76. }   
  77.   
  78.   
  79. SelectorWrapper wrapper=(SelectorWrapper)view.getTag();   
  80.   
  81. wrapper.getBar().setVisibility(View.VISIBLE);   
  82. lastRow=view;   
  83. }   
  84.   
  85. public void onNothingSelected(AdapterView<?> parent) {   
  86. //Log.i("onNothingSelected","parent:"+parent);   
  87. if (lastRow!=null) {   
  88. SelectorWrapper wrapper=(SelectorWrapper)lastRow.getTag();   
  89.   
  90. wrapper.getBar().setVisibility(View.INVISIBLE);   
  91. lastRow=null;   
  92. }   
  93.   
  94. }   
  95. };   
  96. }  

    下面的代码是非常主要的,这个要的没有写的话,是什么效果也显示不出来的。

Java代码
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <LinearLayout   
  3. xmlns:android="http://schemas.android.com/apk/res/android"  
  4. android:orientation="horizontal"  
  5. android:layout_width="fill_parent"    
  6. android:layout_height="fill_parent" >   
  7.   
  8.   
  9. <View   
  10. android:id="@+id/bar"  
  11. android:background="#FFFFFF00"  
  12. android:layout_width="5px"    
  13. android:layout_height="fill_parent"  
  14. android:visibility="invisible"  
  15. />   
  16.   
  17.   
  18. <TextView   
  19. android:id="@+id/label"  
  20. android:layout_width="fill_parent"    
  21. android:layout_height="fill_parent"  
  22. android:textSize="10pt"  
  23. android:paddingTop="2px"  
  24. android:paddingBottom="2px"  
  25. android:paddingLeft="5px"  
  26. />   
  27.   
  28.   
  29. </LinearLayout>