2014-08-18
数据适配器: 是连接数据源和视图界面的桥梁
1、数组适配器(ArrayAdapter):用于绑定格式单一的数据
数据源:可以是集合或数组
2、简单适配器(SimpleAdapter):用于绑定格式复杂的数据
数据源:只能是特定泛型的集合
监听器: 程序和用户(或系统)交互的桥梁
OnScrollListener: 检测滚动的变化,可以用于视图在滚动中加载数据
OnItemClickListener: 用于处理视图中单个条目的点击事件
适配器数据的刷新
notifyDataChanged
数组适配器(ArrayAdapter)
1 <ListView 2 android:id="@+id/listView1" 3 android:layout_width="match_parent" 4 android:layout_height="wrap_content" 5 android:layout_alignParentLeft="true" 6 android:layout_alignParentTop="true" > 7 </ListView>
1 public class MainActivity extends ActionBarActivity { 2 private ListView listView; 3 ArrayAdapter<String> arr_adapter; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.fragment_main); 9 10 listView=(ListView) findViewById(R.id.listView1); 11 /* 1、新建一个数据适配器 12 ArrayAdapter<>(上下文,加载所对应的布局文件,数据源) 13 2、适配器加载数据源 */ 14 String[] arr_data = { 15 "星期1","星期2","星期3","星期4", 16 "星期5","星期6","星期7" 17 }; 18 arr_adapter=new ArrayAdapter<String>(MainActivity.this, 19 android.R.layout.simple_list_item_1, arr_data); 20 //3、视图(ListView)加载适配器 21 listView.setAdapter(arr_adapter); 22 } 23 }
简单适配器(SimpleAdapter)
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="horizontal" > 6 7 <ImageView 8 android:id="@+id/pic" 9 android:layout_width="wrap_content" 10 android:layout_height="wrap_content" 11 android:layout_marginLeft="15dp" 12 android:src="@drawable/ic_launcher" 13 /> 14 15 <TextView 16 android:id="@+id/text" 17 android:layout_width="wrap_content" 18 android:layout_height="wrap_content" 19 android:layout_marginLeft="15dp" 20 android:textSize="20sp" 21 android:textColor="#000000" 22 android:text="demo" 23 /> 24 25 </LinearLayout>
1 public class MainActivity extends ActionBarActivity { 2 private ListView listView; 3 private SimpleAdapter simp_adapter; 4 private List<Map<String, Object>> dataList; 5 6 @Override 7 protected void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 setContentView(R.layout.fragment_main); 10 11 /** 12 * new SimpleAdapter(context, data, resource, from, to) 13 * @context:上下文 14 * @data: 数据源(List<? extends Map<String, ?>> data), 15 * 一个Map所组成的List集合 16 * 每一个Map都会去对应ListView列表中的一行 17 * 每个Map(键-值对) 中的键必须包含在所有在from中所指定的键 18 * @resource: 列表项的布局文件ID 19 * @from: Map中的键名 20 * to: 绑定数据视图中的ID,与from成对应关系 21 */ 22 listView = (ListView) findViewById(R.id.listView1); 23 dataList = new ArrayList<Map<String, Object>>(); 24 25 simp_adapter=new SimpleAdapter(this, getData(), R.layout.item 26 ,new String[]{"pic","text"}, new int[]{R.id.pic,R.id.text}); 27 28 listView.setAdapter(simp_adapter); 29 } 30 31 private List<Map<String, Object>> getData(){ 32 for (int i = 0; i < 20; i++) { 33 Map<String,Object> map = new HashMap<String,Object>(); 34 map.put("pic",R.drawable.ic_launcher); 35 map.put("text", "demo"+i); 36 dataList.add(map); 37 } 38 39 return dataList; 40 }
//添加监听事件,点击后出现吐司,返回位置信息
1 public class MainActivity extends ActionBarActivity implements OnScrollListener,OnItemClickListener{ 2 private ListView listView; 3 private SimpleAdapter simp_adapter; 4 private List<Map<String, Object>> dataList; 5 6 @Override 7 protected void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 setContentView(R.layout.fragment_main); 10 11 /** 12 * new SimpleAdapter(context, data, resource, from, to) 13 * @context:上下文 14 * @data: 数据源(List<? extends Map<String, ?>> data), 15 * 一个Map所组成的List集合 16 * 每一个Map都会去对应ListView列表中的一行 17 * 每个Map(键-值对) 中的键必须包含在所有在from中所指定的键 18 * @resource: 列表项的布局文件ID 19 * @from: Map中的键名 20 * @to: 绑定数据视图中的ID,与from成对应关系 21 */ 22 listView = (ListView) findViewById(R.id.listView1); 23 dataList = new ArrayList<Map<String, Object>>(); 24 25 simp_adapter=new SimpleAdapter(this, getData(), R.layout.item 26 ,new String[]{"pic","text"}, new int[]{R.id.pic,R.id.text}); 27 28 listView.setAdapter(simp_adapter); 29 30 //加载事件监听器 31 listView.setOnItemClickListener(this); 32 listView.setOnScrollListener(this); 33 } 34 35 private List<Map<String, Object>> getData(){ 36 for (int i = 0; i < 20; i++) { 37 Map<String,Object> map = new HashMap<String,Object>(); 38 map.put("pic",R.drawable.ic_launcher); 39 map.put("text", "demo"+i); 40 dataList.add(map); 41 } 42 43 return dataList; 44 } 45 46 //需求:点击项,返回位置,内容, 吐司, 47 @Override 48 public void onItemClick(AdapterView<?> parent, View view, int position, 49 long id) { 50 // TODO 自动生成的方法存根 51 String text = listView.getItemAtPosition(position)+""; 52 Toast.makeText(this, "position="+position+" text="+text, Toast.LENGTH_LONG).show(); 53 54 } 55 56 @Override 57 public void onScrollStateChanged(AbsListView view, int scrollState) { 58 // TODO 自动生成的方法存根 59 60 } 61 62 @Override 63 public void onScroll(AbsListView view, int firstVisibleItem, 64 int visibleItemCount, int totalItemCount) { 65 // TODO 自动生成的方法存根 66 } 67 }
在上面的基础上添加监听滚动事件,在Log上输出滚动状态
在快速滑动时添加项目
1 public class MainActivity extends ActionBarActivity implements OnScrollListener,OnItemClickListener{ 2 private ListView listView; 3 private SimpleAdapter simp_adapter; 4 private List<Map<String, Object>> dataList; 5 6 @Override 7 protected void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 setContentView(R.layout.fragment_main); 10 11 /** 12 * new SimpleAdapter(context, data, resource, from, to) 13 * @context:上下文 14 * @data: 数据源(List<? extends Map<String, ?>> data), 15 * 一个Map所组成的List集合 16 * 每一个Map都会去对应ListView列表中的一行 17 * 每个Map(键-值对) 中的键必须包含在所有在from中所指定的键 18 * @resource: 列表项的布局文件ID 19 * @from: Map中的键名 20 * @to: 绑定数据视图中的ID,与from成对应关系 21 */ 22 listView = (ListView) findViewById(R.id.listView1); 23 dataList = new ArrayList<Map<String, Object>>(); 24 25 simp_adapter=new SimpleAdapter(this, getData(), R.layout.item 26 ,new String[]{"pic","text"}, new int[]{R.id.pic,R.id.text}); 27 28 listView.setAdapter(simp_adapter); 29 30 //加载事件监听器 31 listView.setOnItemClickListener(this); 32 listView.setOnScrollListener(this); 33 } 34 35 private List<Map<String, Object>> getData(){ 36 for (int i = 0; i < 20; i++) { 37 Map<String,Object> map = new HashMap<String,Object>(); 38 map.put("pic",R.drawable.ic_launcher); 39 map.put("text", "demo"+i); 40 dataList.add(map); 41 } 42 43 return dataList; 44 } 45 46 //需求:点击项,返回位置,内容, 吐司, 47 @Override 48 public void onItemClick(AdapterView<?> parent, View view, int position, 49 long id) { 50 // TODO 自动生成的方法存根 51 String text = listView.getItemAtPosition(position)+""; 52 Toast.makeText(this, "position="+position+" text="+text, Toast.LENGTH_LONG).show(); 53 54 } 55 56 //手指在列表中滑动,滑动到底部,自动增加项目 57 @Override 58 public void onScrollStateChanged(AbsListView view, int scrollState) { 59 // TODO 自动生成的方法存根 60 switch(scrollState){ 61 case SCROLL_STATE_FLING: 62 Log.i("Main","用户手指用力滑了一下,之后离开屏幕"); 63 Map<String, Object> map = new HashMap<String, Object>(); 64 map.put("pic", R.drawable.ic_launcher); 65 map.put("text", "增加项"); 66 dataList.add(map); 67 //控制UI线程刷新界面 68 simp_adapter.notifyDataSetChanged(); 69 break; 70 case SCROLL_STATE_IDLE: 71 Log.i("Main", "视图停止滑动"); 72 break; 73 case SCROLL_STATE_TOUCH_SCROLL: 74 Log.i("main", "手指未离开屏幕,视图正在滑动"); 75 break; 76 } 77 } 78 79 @Override 80 public void onScroll(AbsListView view, int firstVisibleItem, 81 int visibleItemCount, int totalItemCount) { 82 // TODO 自动生成的方法存根 83 } 84 }
使用ListView显示信息列表,用监听器和适配器,操作,布布扣,bubuko.com
原文:http://www.cnblogs.com/sidianshui/p/3919803.html