ListView
作用:android系统中显示列表的控件
【数据适配器】作用:把复杂的数据填充在指定的视图界面,是连接数据源和视图界面的桥梁
分类:1.ArrayAdapter数组适配器:绑定格式单一的数据。数据源可以是集合或数组
2.SimpleAdapter简单适配器:用于绑定格式复杂的数据。数据源只能是特定泛型的集合
【实现过程:】新建适配器à添加数据源到适配器à视图加载适配器
________________________实践ArrayAdapter_____________________________
1.声明ListView,ArrayAdapter,SimpleAdapter。初始化listview控件
2.新建适配器。
arr_adapter= new ArrayAdapter<String>(context,textViewResourceId,objects)
---context:上下文 this
---textViewResourceId:当前ListView加载的每一个列表项所对应的布局文件
---objects:数据源,要新建一个数组类型的数据块
3.添加数据源到适配器。
数据源String[]arr_data={“aaa”,”bbb”,”ccc”,”ddd”};
则有:arr_adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arr_data);
4.视图加载适配器。listView.setAdapter(arr_adapter);
________________________实践SimpleAdapter____________________________
2.新建适配器。
声明数据源Map: private List<Map<String,Object>> dataList;
simp_adapter=newSimpleAdapter(context,data,resource,from,to)
---context:上下文
---data:数据源(List<?extends Map<String,?>>data)一个Map所组成的List集合
每一个Map都会去对应ListView列表中的一行
每一个Map(键-值对)中的键必须包含所有在from中所指定的键
---resource:列表项的布局文件ID
---from:记录Map中的键名
---to:绑定数据视图中的ID,与from对应
3.添加数据源到适配器。
数据源data:dataList = new ArrayList<Map<String,Object>>();
则有:simp_adapter=new SimpleAdapter(this,getData(),R.layout.item,newString[]{“pic”,”text1”,”text2”},new int[]{R.id.pic,R.id.text1,R.id.text2})
//pic,text1,text2是item.xml布局文件中的3个控件
写getData()方法:
private List<Map<String,Object>> getData(){
for(int i=0;i<20;i++)//创建20条map(listview的一行)
{Map<String,Object>map=newHashMap<String,Object>();
map.put(“pic”,R.drawable.ic_launcher);
map.put(“text1”,”Head_list”+i);//列表上要显示的文字
map.put(“text2”,”Little_list”+i);
datalist.add(map);
}return datalist;
}
4.视图加载适配器。listView.setAdapter(simp_adapter);
监听ListView列表项点击事件
两种接口:ItemClickListener,ScrollListener
一:ItemClickListener监听单一事件
1.Activity继承两个接口:接口Activityimplements AdapterView.OnItemClickListener,AbsListView.OnScrollListener
记得写对应接口的实现方法:public void onItemClick(AdapterView<?> parent,Viewview,int position,long id){
}
public voidonScrollStateChanged(AbsListView view,int ScrollState){
}
public void onScroll(AbsListView view,intfirstVisibleItem,int visibleItemCount,int totalItemCount){
}
2.给listView设置两种监听器:listView.setOnItemClickListener(this),listView.setOnScrollListener(this)
3. public void onItemClick(AdapterView<?>parent,View view,int position,long id){
String text =listView.getItemAtPosition(position)+””;
Toast.makeText(this,”position=”+position+” text=”+text,Toast.LENGTH_SHORT).show();//点击一条list,以toast打印出提示信息
}
二:ScrollListener监听滚动事件
滚动事件的3种状态(int类型):1.SCROLL_STATE_FLING手指离开屏幕前用力滑动一下,视图由于惯性继续滑动
2.SCROLL_STATE_IDLE视图已经停止滑动
3.SCROLL_STATE_TOUCH_SCROLL手指没离开屏幕,视图正在滑动
将3种状态以switch case的形式写入onScrollStateChanged()
**下拉刷新:用力滑动之后刷新,增加新的信息。在SCROLL_STATE_FLING后追加Map<String,Object>map=new HashMap<String,Object>();
map.put(“pic”,”R.drawable.ic_launcher”);
map.put(“text1”,”增加项”);
dataList.add(map);
simple_adapter.notifyDataSetChanged();//重新通知刷新主界面,动态更新视图中所包含的数据
package com.example.administrator.listview_practice;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
public class MainActivity extends Activity implements AdapterView.OnItemClickListener,AbsListView.OnScrollListener {
private ListView listView;
private ArrayAdapter
arr_adapter;
private SimpleAdapter simp_adapter;
private List