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>

 

posted @ 2015-05-26 11:16  f9q  阅读(160)  评论(0)    收藏  举报