首页 > 代码库 > 使用ListView显示信息列表,用监听器和适配器,操作
使用ListView显示信息列表,用监听器和适配器,操作
2014-08-18
数据适配器: 是连接数据源和视图界面的桥梁
1、数组适配器(ArrayAdapter):用于绑定格式单一的数据
数据源:可以是集合或数组
2、简单适配器(SimpleAdapter):用于绑定格式复杂的数据
数据源:只能是特定泛型的集合
监听器: 程序和用户(或系统)交互的桥梁
OnScrollListener: 检测滚动的变化,可以用于视图在滚动中加载数据
OnItemClickListener: 用于处理视图中单个条目的点击事件
适配器数据的刷新
notifyDataChanged
数组适配器(ArrayAdapter)
1 <ListView2 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 =http://www.mamicode.com/ {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: 列表项的布局文件ID19 * @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.item26 ,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: 列表项的布局文件ID19 * @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.item26 ,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 @Override48 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 @Override57 public void onScrollStateChanged(AbsListView view, int scrollState) {58 // TODO 自动生成的方法存根59 60 }61 62 @Override63 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: 列表项的布局文件ID19 * @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.item26 ,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 @Override48 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 @Override58 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 @Override80 public void onScroll(AbsListView view, int firstVisibleItem,81 int visibleItemCount, int totalItemCount) {82 // TODO 自动生成的方法存根83 }84 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。