• 當前位置:首頁 > IT技術 > 移動平臺 > 正文

    【Android】Android適配器之ArrayAdapter、SimpleAdapter和BaseAdapter的簡單用法
    2021-09-08 11:44:32

    ?



    ArrayAdapter、SimpleAdapter和BaseAdapter的一些簡短代碼片段,希望用時方便想起其用法。

    1.ArrayAdapter

    ?

    只可以簡單的顯示一行文本

    代碼片段:

    ?

    ?
    1. ArrayAdapter<String>?adapter?=?new?ArrayAdapter<String>(??
    2. ????????????????this,??
    3. ????????????????R.layout.item,//只能有一個定義了id的TextView??
    4. ????????????????data);//data既可以是數組,也可以是List集合??


    ?

    2.SimpleAdapter

    ?

    可以顯示比較復雜的列表,包括每行顯示圖片、文字等,但不能對列表進行后期加工(在java代碼中加工),
    也是只是單純的負責顯示(當然可以設計復雜點的布局來顯示復雜列表),例如,每行顯示不同背景等。

    代碼片段:

    ?

    ?
    1. List<Map<String,Object>>?mData=?new?ArrayList<Map<String,Object>>();;??
    2. for(int?i?=0;?i?<?lengh;?i++)?{??????
    3. ????Map<String,Object>?item?=?new?HashMap<String,Object>();??????
    4. ????item.put("image",?R.drawable.portrait);??????
    5. ????item.put("title",?mListTitle[i]);??????
    6. ????item.put("text",?mListStr[i]);??????
    7. ????mData.add(item);???????
    8. }??????
    9. SimpleAdapter?adapter?=?new?SimpleAdapter(??
    10. ????????????????this,??
    11. ????????????????mData,??
    12. ????????????????R.layout.item,??????
    13. ????????????????new?String[]{"image","title","text"},??
    14. ????????????????new?int[]{R.id.image,R.id.title,R.id.text});?????

    ?

    ?

    3.BaseAdapter

    ?

    可以實現復雜的列表布局,由于BaseAdapter是一個抽象類,使用該類需要自己寫一個適配器繼承該類,
    正是由于繼承了該類,需要我們重寫一些方法,讓我們可以在代碼里控制列表的樣式,更加靈活。

    代碼片段:

    ?

    ?
    1. private?class?MyListAdapter?extends?BaseAdapter{????
    2. ????????private?Context?mContext;????
    3. ????????private?int[]?colors=new?int[]{0xff626569,0xff4f5257?};????
    4. ?????????public?MyListAdapter(Context?context){????
    5. ?????????????mContext=context;????
    6. ?????????}????
    7. ????????@Override????
    8. ????????public?int?getCount()?{????
    9. ????????????//?TODO?Auto-generated?method?stub????
    10. ????????????return?mListText.length;????
    11. ????????}????
    12. ????
    13. ????????@Override????
    14. ????????public?Object?getItem(int?position)?{????
    15. ????????????//?TODO?Auto-generated?method?stub????
    16. ????????????return?position;????
    17. ????????}????
    18. ????
    19. ????????@Override????
    20. ????????public?long?getItemId(int?position)?{????
    21. ????????????//?TODO?Auto-generated?method?stub????
    22. ????????????return?position;????
    23. ????????}????
    24. ????
    25. ????????@Override????
    26. ????????public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{????
    27. ????????????ImageView?image=null;??//這些控件可以單獨封裝成一個類(Holder),便與優化??
    28. ????????????TextView?title=null;????
    29. ????????????TextView??content=null;????
    30. ????????????if(convertView==null){????
    31. ????????????????convertView=LayoutInflater.from(mContext).inflate(R.layout.colorlist,?null);????
    32. ????????????????image=(ImageView)?convertView.findViewById(R.id.color_image);????
    33. ????????????????title=(TextView)?convertView.findViewById(R.id.color_title);????
    34. ????????????????content=(TextView)?convertView.findViewById(R.id.color_text);????
    35. ????????????}???
    36. ????????????int?colorPos=position%colors.length;????
    37. ????????????convertView.setBackgroundColor(colors[colorPos]);????
    38. ????????????title.setText(mListTitle[position]);????
    39. ????????????content.setText(mListText[position]);????
    40. ????????????image.setImageResource(R.drawable.portrait);????
    41. ????????????????
    42. ????????????return?convertView;????
    43. ????????}????
    44. ????????????
    45. ????}????
    46. ??
    47. --------------------------下面樣例列表頁的控件單獨封裝成了一個類(Holder),便與優化-----??
    48. ??
    49. ??
    50. ?public?class?MyBaseAdapter?extends?BaseAdapter{??
    51. ???????
    52. ???????????private?LayoutInflater?mInflater;??
    53. ????????????public?MyAdapter(Context?context){??
    54. ???????????????this.mInflater?=?LayoutInflater.from(context);??
    55. ??????????}??
    56. ????????????@Override??
    57. ???????????public?int?getCount()?{??
    58. ????????????????//?TODO?Auto-generated?method?stub??
    59. ????????????????return?mData.size();??
    60. ????????????}??
    61. ???????
    62. ????????????@Override??
    63. ????????????public?Object?getItem(int?arg0)?{??
    64. ????????????????//?TODO?Auto-generated?method?stub??
    65. ????????????????return?null;??
    66. ???????????}??
    67. ???????
    68. ????????????@Override??
    69. ????????????public?long?getItemId(int?arg0)?{??
    70. ????????????????//?TODO?Auto-generated?method?stub??
    71. ????????????????return?0;??
    72. ????????????}??
    73. ???????
    74. ????????????@Override??
    75. ????????????public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{??
    76. ???????????????????
    77. ????????????????ViewHolder?holder?=?null;??
    78. ????????????????if?(convertView?==?null)?{??
    79. ????????????????????holder=new?ViewHolder();???
    80. ????????????????????convertView?=?mInflater.inflate(R.layout.vlist2,?null);??
    81. ????????????????????holder.img?=?(ImageView)convertView.findViewById(R.id.img);??
    82. ????????????????????holder.title?=?(TextView)convertView.findViewById(R.id.title);??
    83. ????????????????????holder.info?=?(TextView)convertView.findViewById(R.id.info);??
    84. ????????????????????holder.viewBtn?=?(Button)convertView.findViewById(R.id.view_btn);??
    85. ????????????????????convertView.setTag(holder);??
    86. ???????????????????????
    87. ????????????????}else?{???????????????????????
    88. ????????????????????holder?=?(ViewHolder)convertView.getTag();??
    89. ????????????????}??
    90. ????????????????holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));??
    91. ????????????????holder.title.setText((String)mData.get(position).get("title"));??
    92. ????????????????holder.info.setText((String)mData.get(position).get("info"));??
    93. ????????????????//給每一個列表后面的按鈕添加響應事件??
    94. ????????????????holder.viewBtn.setOnClickListener(new?View.OnClickListener()?{??
    95. ????????????????????@Override??
    96. ????????????????????public?void?onClick(View?v)?{??
    97. ????????????????????????showInfo();??????????????????
    98. ????????????????????}??
    99. ????????????????});??
    100. ??
    101. ????????????????return?convertView;??
    102. ????????????}??
    103. ????????------------??
    104. ????????public?final?class?ViewHolder{??
    105. ????????????public?ImageView?img;??
    106. ????????????public?TextView?title;??
    107. ????????????public?TextView?info;??
    108. ????????????public?Button?viewBtn;??
    109. ????????}??


    ?

    ?

    ?

    原文來源:javascript:void(0)

    1.ArrayAdapter

    ?

    只可以簡單的顯示一行文本

    代碼片段:

    ?

    ?
    1. ArrayAdapter<String>?adapter?=?new?ArrayAdapter<String>(??
    2. ????????????????this,??
    3. ????????????????R.layout.item,//只能有一個定義了id的TextView??
    4. ????????????????data);//data既可以是數組,也可以是List集合??



    ?

    2.SimpleAdapter

    ?

    可以顯示比較復雜的列表,包括每行顯示圖片、文字等,但不能對列表進行后期加工(在java代碼中加工),
    也是只是單純的負責顯示(當然可以設計復雜點的布局來顯示復雜列表),例如,每行顯示不同背景等。

    代碼片段:

    ?

    ?
    1. List<Map<String,Object>>?mData=?new?ArrayList<Map<String,Object>>();;??
    2. for(int?i?=0;?i?<?lengh;?i++)?{??????
    3. ????Map<String,Object>?item?=?new?HashMap<String,Object>();??????
    4. ????item.put("image",?R.drawable.portrait);??????
    5. ????item.put("title",?mListTitle[i]);??????
    6. ????item.put("text",?mListStr[i]);??????
    7. ????mData.add(item);???????
    8. }??????
    9. SimpleAdapter?adapter?=?new?SimpleAdapter(??
    10. ????????????????this,??
    11. ????????????????mData,??
    12. ????????????????R.layout.item,??????
    13. ????????????????new?String[]{"image","title","text"},??
    14. ????????????????new?int[]{R.id.image,R.id.title,R.id.text});?????

    ?

    ?

    3.BaseAdapter

    ?

    可以實現復雜的列表布局,由于BaseAdapter是一個抽象類,使用該類需要自己寫一個適配器繼承該類,
    正是由于繼承了該類,需要我們重寫一些方法,讓我們可以在代碼里控制列表的樣式,更加靈活。

    代碼片段:

    ?

    ?
    1. private?class?MyListAdapter?extends?BaseAdapter{????
    2. ????????private?Context?mContext;????
    3. ????????private?int[]?colors=new?int[]{0xff626569,0xff4f5257?};????
    4. ?????????public?MyListAdapter(Context?context){????
    5. ?????????????mContext=context;????
    6. ?????????}????
    7. ????????@Override????
    8. ????????public?int?getCount()?{????
    9. ????????????//?TODO?Auto-generated?method?stub????
    10. ????????????return?mListText.length;????
    11. ????????}????
    12. ????
    13. ????????@Override????
    14. ????????public?Object?getItem(int?position)?{????
    15. ????????????//?TODO?Auto-generated?method?stub????
    16. ????????????return?position;????
    17. ????????}????
    18. ????
    19. ????????@Override????
    20. ????????public?long?getItemId(int?position)?{????
    21. ????????????//?TODO?Auto-generated?method?stub????
    22. ????????????return?position;????
    23. ????????}????
    24. ????
    25. ????????@Override????
    26. ????????public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{????
    27. ????????????ImageView?image=null;??//這些控件可以單獨封裝成一個類(Holder),便與優化??
    28. ????????????TextView?title=null;????
    29. ????????????TextView??content=null;????
    30. ????????????if(convertView==null){????
    31. ????????????????convertView=LayoutInflater.from(mContext).inflate(R.layout.colorlist,?null);????
    32. ????????????????image=(ImageView)?convertView.findViewById(R.id.color_image);????
    33. ????????????????title=(TextView)?convertView.findViewById(R.id.color_title);????
    34. ????????????????content=(TextView)?convertView.findViewById(R.id.color_text);????
    35. ????????????}???
    36. ????????????int?colorPos=position%colors.length;????
    37. ????????????convertView.setBackgroundColor(colors[colorPos]);????
    38. ????????????title.setText(mListTitle[position]);????
    39. ????????????content.setText(mListText[position]);????
    40. ????????????image.setImageResource(R.drawable.portrait);????
    41. ????????????????
    42. ????????????return?convertView;????
    43. ????????}????
    44. ????????????
    45. ????}????
    46. ??
    47. --------------------------下面樣例列表頁的控件單獨封裝成了一個類(Holder),便與優化-----??
    48. ??
    49. ??
    50. ?public?class?MyBaseAdapter?extends?BaseAdapter{??
    51. ???????
    52. ???????????private?LayoutInflater?mInflater;??
    53. ????????????public?MyAdapter(Context?context){??
    54. ???????????????this.mInflater?=?LayoutInflater.from(context);??
    55. ??????????}??
    56. ????????????@Override??
    57. ???????????public?int?getCount()?{??
    58. ????????????????//?TODO?Auto-generated?method?stub??
    59. ????????????????return?mData.size();??
    60. ????????????}??
    61. ???????
    62. ????????????@Override??
    63. ????????????public?Object?getItem(int?arg0)?{??
    64. ????????????????//?TODO?Auto-generated?method?stub??
    65. ????????????????return?null;??
    66. ???????????}??
    67. ???????
    68. ????????????@Override??
    69. ????????????public?long?getItemId(int?arg0)?{??
    70. ????????????????//?TODO?Auto-generated?method?stub??
    71. ????????????????return?0;??
    72. ????????????}??
    73. ???????
    74. ????????????@Override??
    75. ????????????public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{??
    76. ???????????????????
    77. ????????????????ViewHolder?holder?=?null;??
    78. ????????????????if?(convertView?==?null)?{??
    79. ????????????????????holder=new?ViewHolder();???
    80. ????????????????????convertView?=?mInflater.inflate(R.layout.vlist2,?null);??
    81. ????????????????????holder.img?=?(ImageView)convertView.findViewById(R.id.img);??
    82. ????????????????????holder.title?=?(TextView)convertView.findViewById(R.id.title);??
    83. ????????????????????holder.info?=?(TextView)convertView.findViewById(R.id.info);??
    84. ????????????????????holder.viewBtn?=?(Button)convertView.findViewById(R.id.view_btn);??
    85. ????????????????????convertView.setTag(holder);??
    86. ???????????????????????
    87. ????????????????}else?{???????????????????????
    88. ????????????????????holder?=?(ViewHolder)convertView.getTag();??
    89. ????????????????}??
    90. ????????????????holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));??
    91. ????????????????holder.title.setText((String)mData.get(position).get("title"));??
    92. ????????????????holder.info.setText((String)mData.get(position).get("info"));??
    93. ????????????????//給每一個列表后面的按鈕添加響應事件??
    94. ????????????????holder.viewBtn.setOnClickListener(new?View.OnClickListener()?{??
    95. ????????????????????@Override??
    96. ????????????????????public?void?onClick(View?v)?{??
    97. ????????????????????????showInfo();??????????????????
    98. ????????????????????}??
    99. ????????????????});??
    100. ??
    101. ????????????????return?convertView;??
    102. ????????????}??
    103. ????????------------??
    104. ????????public?final?class?ViewHolder{??
    105. ????????????public?ImageView?img;??
    106. ????????????public?TextView?title;??
    107. ????????????public?TextView?info;??
    108. ????????????public?Button?viewBtn;??
    109. ????????}??



    ?

    ?

    ?

    本文摘自 :https://blog.51cto.com/u

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码