您的位置:首页 > 移动开发 > Android开发

Android-简单适配器SimpleAdapter的用法

2016-04-17 08:43 696 查看
前边有一篇博文是介绍ArrayAdapter(数组适配器)的用法,数组适配器用于绑定格式单一的数据,数据源可以是集合或者数组,而这一篇博文介绍的是SimpleAdapter(简单适配器)的用法,简单适配器用于绑定格式复杂的数据,数据源只能是特定泛型的集合。

目标效果:





使用简单适配器循环输出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错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: