Android-简单适配器SimpleAdapter的用法
2016-04-17 08:43
696 查看
前边有一篇博文是介绍ArrayAdapter(数组适配器)的用法,数组适配器用于绑定格式单一的数据,数据源可以是集合或者数组,而这一篇博文介绍的是SimpleAdapter(简单适配器)的用法,简单适配器用于绑定格式复杂的数据,数据源只能是特定泛型的集合。
目标效果:
![](http://img.blog.csdn.net/20160417084301694?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20160417084428476?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
使用简单适配器循环输出ListView列表,并且添加滑动事件,滑动一次增加一项。
1.显示activity_main.xml页面添加LisiView控件。
activity_main.xml页面:
2.新建item.xml页面,作为ListView每一行的一个布局。
item.xml页面:
3.MainActivity.java页面进行事件处理。
MainActivity.java页面:
4.程序运行就可以出现目标效果,并且日志文件会有相应的输出。
![](http://img.blog.csdn.net/20160417085554966?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如果手指松开让屏幕自行滑动,那么会打印三条信息,如果手指按住屏幕滑动后,使屏幕静止再抬起手指,那么将不会打印”惯性滑动“这条信息。
5.另外,本例的日志信息打印使用的log.i(),关于日志打印有多种选择。
(1)Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("","");
(2)Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择;
(3)Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息;
(4)Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息;
(5)Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了.
目标效果:
使用简单适配器循环输出ListView列表,并且添加滑动事件,滑动一次增加一项。
1.显示activity_main.xml页面添加LisiView控件。
activity_main.xml页面:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true"> </ListView> </RelativeLayout>
2.新建item.xml页面,作为ListView每一行的一个布局。
item.xml页面:
<?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="match_parent" android:orientation="horizontal" > <ImageView android:id="@+id/ivPic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/tvtext" android:textSize="20sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> </LinearLayout>
3.MainActivity.java页面进行事件处理。
MainActivity.java页面:
package com.example.simpleadapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.SimpleAdapter; public class MainActivity extends Activity implements OnScrollListener{ private ListView listview; private SimpleAdapter simp_adapter; private List<Map<String,Object>>dataList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listview=(ListView) findViewById(R.id.listview); dataList=new ArrayList<Map<String,Object>>(); /** * context:上下文,就是当前Activity * data:数据源,一个Map所组成的List集合,每一个Map都会去对应ListView列表中的一行,每一个Map中的键必须包含所有在from中指定的键 * resource:列表项的布局文件id * from:Map中的键名 * to:绑定数据视图中的id,与from成对应关系 */ simp_adapter=new SimpleAdapter(this, getData(),R.layout.item, new String[]{"ivPic","tvText"}, new int[]{R.id.ivPic,R.id.tvtext});//新建适配器 listview.setAdapter(simp_adapter); //视图加载适配器 listview.setOnScrollListener(this); //滚动事件 } private List<Map<String,Object>> getData(){ for(int i=0;i<20;i++){ Map<String,Object>map=new HashMap<String, Object>(); map.put("ivPic",R.drawable.ic_launcher); //显示的图片信息 map.put("tvText","爱心"+i); //显示的文字信息 dataList.add(map); } return dataList; } @Override public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) { } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch(scrollState){ case SCROLL_STATE_TOUCH_SCROLL: Log.i("MainActivity","手指滑动"); break; case SCROLL_STATE_FLING: Log.i("MainActivity","惯性滚动"); Map<String,Object>map=new HashMap<String, Object>(); map.put("ivPic",R.drawable.ic_launcher); map.put("tvText","增加项"); dataList.add(map); simp_adapter.notifyDataSetChanged(); //重新刷新ListView break; case SCROLL_STATE_IDLE: Log.i("MainActivity","滚动结束"); break; } } }
4.程序运行就可以出现目标效果,并且日志文件会有相应的输出。
如果手指松开让屏幕自行滑动,那么会打印三条信息,如果手指按住屏幕滑动后,使屏幕静止再抬起手指,那么将不会打印”惯性滑动“这条信息。
5.另外,本例的日志信息打印使用的log.i(),关于日志打印有多种选择。
(1)Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("","");
(2)Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择;
(3)Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息;
(4)Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息;
(5)Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了.
相关文章推荐
- Android 使用ContentObserver监听短信的变化,并发送信息给特定的手机号码
- Android Studio使用Lint进行代码检查
- Android学习(25) -- 单元测试(JUnit Test)
- Android应用的界面编程:ProgressBar及其子类[SeekBar、RatingBar]
- Android学习笔记(39):异步任务AsyncTask
- Android学习笔记(38):Handler消息传递处理机制
- Android Studio gradle总结
- AsyncTask的缺陷和问题
- Android学习笔记(37):用Configuration类获取和监听设备信息
- Android Animation (动画设计)
- Android学习--broadcast intent
- Android中使用Intent实现界面跳转
- android:Widget.Material.Button.Colored找不到
- Android-->圆角图片,圆角任意View,圆角父布局Layout(任意形状的View且超简洁实现)
- Android固件加载出错(load failed with error -2)
- Android学习笔记(36):Android的两种事件处理方式
- 内容观察者
- Android系统性能演变历程
- [android] 手机卫士设备管理权限锁屏
- Unsupported major.minor version 52.0