baseAdapter:四大接口
1.getCount() ---item数量
2.getItem(int position)---返回position
3. getItemId(int position)---返回第几号数据
4.getView(int position, View convertView, ViewGroup parent);
position就是位置,从0开始
convertView是Spinner,ListView中每一项要显示的view
parent就是父窗体了,也就是Spinner,ListView,GridView了
通常return 的view也就是convertView
在4中,通常为了效率,先判断contentView之前是否已经创建,实例:
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder viewHolder = null;
- if (convertView == null) {
- viewHolder = new ViewHolder();
- convertView = mInflater.inflate(R.layout.list_item, null);
- viewHolder.id = (TextView) convertView.findViewById(R.id.tv_id);
- convertView.setTag(viewHolder);
- } else {
- viewHolder = (ViewHolder) convertView.getTag();
- }
- viewHolder.id.setText(list.get(position).getId());
- return convertView;
- }
-
notifyDataSetChanged();当数据有变化时可以调用,刷新界面。
------------------------------------------------
baseAdapter---》ArrayAdapter:
构造函数:
/** 129 * Constructor 130 * 131 * @param context The current context. 132 * @param resource The resource ID for a layout file containing a layout to use when 133 * instantiating views. 134 * @param textViewResourceId The id of the TextView within the layout resource to be populated 135 * @param objects The objects to represent in the ListView. 136 */ 137 public ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects) { 138 init(context, resource, textViewResourceId, Arrays.asList(objects)); 139 }
参数:1 2 3 4
1 context
2 resource是指布局文件item。。。当item布局文件只有一个textView时,第三个参数textViewResourceId可无视内部认为是0
3 textViewResourceId指 上面resource文件中的textView的id
4 objects 数据数组的话自动转为list 。没有的话认为是没有数据 就是new ArrayList<T>()
ArrayAdapter(Context context, int textViewResourceId)----》
init(context, textViewResourceId, 0, new ArrayList<T>());
init(context, resource, textViewResourceId, new ArrayList<T>());
ArrayAdapter(Context context, int resource, int textViewResourceId)---》
ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)
ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)
init(context, textViewResourceId, 0, Arrays.asList(objects));
ArrayAdapter(Context context, int textViewResourceId, List<T> objects)
ArrayAdapter(Context context, int textViewResourceId, T[] objects)--》
以上是相关构造函数
simple_spinner_dropdown_item
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);下拉视图用
填充
-----------
SimpleAdapter:构造函数:/** 065 * Constructor 066 * 067 * @param context The context where the View associated with this SimpleAdapter is running 068 * @param data A List of Maps. Each entry in the List corresponds to one row in the list. The 069 * Maps contain the data for each row, and should include all the entries specified in 070 * "from" 071 * @param resource Resource identifier of a view layout that defines the views for this list 072 * item. The layout file should include at least those named views defined in "to" 073 * @param from A list of column names that will be added to the Map associated with each 074 * item. 075 * @param to The views that should display column in the "from" parameter. These should all be 076 * TextViews. The first N views in this list are given the values of the first N columns 077 * in the from parameter. 078 */ 079 public SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)参数:1.2.3.41.context
2.data 链表,节点是Map 用法:Map<String,Object> item;
item=new HashMap<String,Object>();
item.put("姓名", "张三小朋友");
item.put("性别", "男");data= new ArrayList<Map<String,Object>>();
data.add(item);3.resource Item布局文件4.from new String[]{"key1","key2"} data中的数据key值5.to new int[]{R.id.ve_id_1,R.id.ve_id2} Item布局中对应的空间id
-----------------------------------疑问-----------------------
刷新规范用notifyDataSetChanged(),但该 方法有时候会因为自定义的adapter里的list引用而失效,为什么???