Android数据展示之ListView
Android应用程序中经常需要使用ListView展示数据,一个ListView通常将数据填充到布局文件中,在填充的过程中需要知道连接数据与ListView的适配器。适配器是一个连接数据和AdapterView(ListView是一个典型的AdapterView)的桥梁,通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便。常用的适配器有三种ArrayAdapter,SimpleAdapter和BaseAdapter。
ArrayAdapter实现ListView
用ArrayAdapter可以实现简单的ListView的数据绑定。默认情况下,ArrayAdapter绑定每个对象的toString值到layout中预先定义的TextView控件上。ArrayAdapter的使用非常简单。
在布局文件中新增一个ListView
1 2 3 4 | <ListView android:id= "@+id/list_Test" android:layout_width= "match_parent" android:layout_height= "wrap_content" /> |
activity中代码的实现,获取ListView没什么好说的,主要是setAdapter方法,第二个参数就是Android系统中内置布局文件,如果是android.R.layout.simple_list_item_1,就直接是一行文字,我只列举了三个,其他的可以自行测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | String[] listArrStrings= new String[]{ "星期一" , "星期二" , "星期三" }; listView=(ListView) findViewById(R.id.list_Test); listView.setAdapter( new ArrayAdapter<String>( this ,android.R.layout.simple_list_item_single_choice, listArrStrings)); listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); listView.setOnItemClickListener( new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub String nameString=(String) parent.getItemAtPosition(position); setTitle( "今天是:" +nameString); } |
实现结果如下:
重新改变一下代码,改变一下填充的默认的系统的布局文件,可以设置单选还是多选:
1 2 3 4 5 | listView.setAdapter( new ArrayAdapter<String>( this ,android.R.layout.simple_list_item_checked, listArrStrings)); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); listView.setAdapter( new ArrayAdapter<String>( this ,android.R.layout.simple_list_item_checked, listArrStrings)); listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); |
效果如下:
SimpleAdapter实现ListView
这次先来看下要实现的效果:
ListView中每个View布局都一样,这个时候需要首先新建一个布局文件simpleitem.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <?xml version= "1.0" encoding= "utf-8" ?> <LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" android:layout_width= "match_parent" android:layout_height= "wrap_content" android:orientation= "horizontal" > <ImageView android:id= "@+id/itemImage" android:layout_width= "wrap_content" android:layout_height= "match_parent" android:src= "@drawable/ic_launcher" /> <LinearLayout android:layout_width= "match_parent" android:layout_height= "wrap_content" android:orientation= "vertical" android:paddingLeft= "10dp" > <TextView android:id= "@+id/itemTitle" android:layout_width= "match_parent" android:layout_height= "wrap_content" android:text= "标题" android:textSize= "25sp" /> <TextView android:id= "@+id/itemText" android:layout_width= "match_parent" android:layout_height= "wrap_content" android:text= "xxxxxxxxx" /> </LinearLayout> </LinearLayout> |
这个时候代码调用也很简单,跟ArrayAdapter类似,SimpleAdapter,最后两个参数,一个是map中的键,一个对应的simpleitem中的id:
1 2 3 4 5 6 7 8 9 10 11 12 | ListView listView=(ListView) findViewById(R.id.list_simple); ArrayList<HashMap<String, String>> arrayList= new ArrayList<HashMap<String,String>>(); for ( int i = 0 ; i < 10 ; i++) { HashMap<String, String> map= new HashMap<String, String>(); map.put( "itemTitle" , "标题" +i); map.put( "itemText" , "内容" +i); arrayList.add(map); } SimpleAdapter simpleAdapter= new SimpleAdapter( this , arrayList, R.layout.simpleitem, new String[]{ "itemTitle" , "itemText" }, new int []{R.id.itemTitle,R.id.itemText}); listView.setAdapter(simpleAdapter); |
BaseAdapter实现ListView
BaseAdapter可扩展性,可以再View中加入自己定义的一些操作事件,使用的时候需要实现BaseAdapter类,定义一个自己的类;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | class MyBaseAdapter extends BaseAdapter { // 定义List的长度 @Override public int getCount() { // TODO Auto-generated method stub return 100 ; } @Override public Object getItem( int position) { // TODO Auto-generated method stub return null ; } @Override public long getItemId( int position) { // TODO Auto-generated method stub return 30 ; } @Override public View getView( int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub TextView textView = new TextView(BaseActivity. this ); textView.setText( "测试" ); textView.setTextColor(Color.BLUE); textView.setTextSize( 20 ); return textView; } } |
Activity中调用代码:
1 2 | ListView listView = (ListView) findViewById(R.id.list_base); listView.setAdapter( new MyBaseAdapter()); |
上面其实用BaseAdapter实现了ArrayAdapter的功能,同样的可以使用BaseAdapter实现SimpleAdapter的功能:
还是同样的调用simplte这个布局,重写一下getView()方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | View view = null ; if (convertView == null ) { LayoutInflater inflater = BaseActivity. this .getLayoutInflater(); view = inflater.inflate(R.layout.simpleitem, null ); } else { view=convertView; } TextView tvTitleTextView=(TextView) view.findViewById(R.id.itemTitle); TextView tvTextView=(TextView) view.findViewById(R.id.itemText); tvTitleTextView.setTextSize( 20 ); tvTitleTextView.setText( "标题---" +position); tvTitleTextView.setTextColor(Color.RED); tvTextView.setTextSize( 15 ); tvTextView.setText( "内容----" +position); return view; |
效果如下:
十一点了,该睡觉了,程序员还是不要熬夜的比较好~
出处:http://www.cnblogs.com/xiaofeixiang
说明:博客经个人辛苦努力所得,如有转载会特别申明,博客不求技惊四座,但求与有缘人分享个人学习知识,生活学习提高之用,博客所有权归本人和博客园所有,如有转载请在显著位置给出博文链接和作者姓名,否则本人将付诸法律。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步