Adapter(7)BaseAdapter示例
BaseAdapter是完全自定义的adapter.可定制化程度最高.
1.BaseAdapterFrgmt.java
1 public class BaseAdapterFrgmt extends Fragment { 2 3 private ListView list; 4 private List<Map<String,Object>> data; 5 private CustomBaseAdapter adapter; 6 7 8 private void init(){ 9 data = new ArrayList<Map<String,Object>>(); 10 Map<String,Object> map; 11 for (int i = 0; i < 20; i++) { 12 map = new HashMap<String, Object>(); 13 map.put("icon", R.drawable.ic_launcher); 14 map.put("title", "title"+i); 15 map.put("content", "content"+i); 16 data.add(map); 17 } 18 adapter = new CustomBaseAdapter(getActivity(), data); 19 list.setAdapter(adapter); 20 } 21 @Override 22 public View onCreateView(LayoutInflater inflater, ViewGroup container, 23 Bundle savedInstanceState) { 24 View v = inflater.inflate(R.layout.frgmt_base_adapter, container,false); 25 list = (ListView) v.findViewById(R.id.base_adapter_list_view); 26 init(); 27 return v; 28 } 29 }
2.CustomBaseAdapter.java
1 public class CustomBaseAdapter extends BaseAdapter { 2 3 public final class ViewItemData { 4 public int icon_resid; 5 public String title_txt; 6 public String content_txt; 7 public String submit_btn; 8 } 9 10 private LayoutInflater mInflater; 11 private List<Map<String, Object>> mdata; 12 private Context mContext; 13 14 public CustomBaseAdapter(Context context, List<Map<String, Object>> data) { 15 mContext = context; 16 mInflater = LayoutInflater.from(context); 17 mdata = data; 18 } 19 20 @Override 21 public int getCount() { 22 return mdata.size(); 23 } 24 25 @Override 26 public Object getItem(int position) { 27 return mdata.get(position); 28 } 29 30 @Override 31 public long getItemId(int position) { 32 return position; 33 } 34 @Override 35 public View getView(int position, View convertView, ViewGroup parent) { 36 if (convertView == null) { 37 convertView = mInflater.inflate(R.layout.list_item_base_adapter, 38 null); 39 } 40 ImageView icon = (ImageView) convertView 41 .findViewById(R.id.vid_iv_base_adapter); 42 TextView title = (TextView) convertView 43 .findViewById(R.id.vid_tv_title_base_adapter); 44 TextView content = (TextView) convertView 45 .findViewById(R.id.vid_tv_content_base_adapter); 46 Button viewBtn = (Button) convertView 47 .findViewById(R.id.vid_btn_base_adapter); 48 HashMap<String, Object> hm = (HashMap<String, Object>) mdata 49 .get(position); 50 title.setText((String) hm.get("title")); 51 content.setText((String) hm.get("content")); 52 viewBtn.setText("button" + position); 53 final int pos = position; 54 viewBtn.setOnClickListener(new View.OnClickListener() { 55 @Override 56 public void onClick(View v) { 57 Toast.makeText(mContext, "title" + pos, Toast.LENGTH_SHORT).show(); 58 } 59 }); 60 return convertView; 61 } 62 63 }
这个getView方法写的不对,性能有问题,这样每次都要findViewById,正确写法应该使用ViewHolder和tag,见:
http://www.cnblogs.com/sjjg/articles/5446654.html
3.baseadapter的主布局文件
frgmt_base_adapter.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" > 6 7 <ListView 8 android:id="@+id/base_adapter_list_view" 9 android:layout_width="wrap_content" 10 android:layout_height="match_parent" > 11 </ListView> 12 13 </LinearLayout>
4.base-adapter对应的list-view的item布局文件
list_item_base_adapter.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:gravity="center_vertical" 6 android:orientation="horizontal" > 7 8 <ImageView 9 android:id="@+id/vid_iv_base_adapter" 10 android:layout_width="wrap_content" 11 android:layout_height="wrap_content" 12 android:src="@drawable/ic_launcher" /> 13 14 <LinearLayout 15 android:layout_width="wrap_content" 16 android:layout_height="match_parent" 17 android:gravity="center_vertical" 18 android:orientation="vertical" > 19 20 <TextView 21 android:id="@+id/vid_tv_title_base_adapter" 22 android:layout_width="wrap_content" 23 android:layout_height="wrap_content" 24 android:text="@string/title" /> 25 26 <TextView 27 android:id="@+id/vid_tv_content_base_adapter" 28 android:layout_width="wrap_content" 29 android:layout_height="wrap_content" 30 android:text="@string/content" /> 31 32 </LinearLayout> 33 34 <Button 35 android:id="@+id/vid_btn_base_adapter" 36 android:layout_width="wrap_content" 37 android:layout_height="wrap_content" 38 android:text="@string/button" /> 39 40 </LinearLayout>

浙公网安备 33010602011771号