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

Android之ListView实现下拉刷新

2015-10-22 07:47 477 查看
1,在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。

2,在学习ListView之前,让我们先来熟悉两个与其相关的知识点:

a:监听器

作用:android提供了很多种事件监听器,监听器主要是为了去响应某个动作(动作的发起者可以是用户的操作,也可以是android系统本身),我们可以通过监控这种动作行为,来完成我们需要的程序功能。

OnItemClickListener:

可以处理视图中单个条目的点击事件。

OnScrollListener:

监测滚动的变化,可以用于视图在在滚动中加载数据。

实现过程:视图直接设置监听器,在相关的实现方法中补充需要的代码即可。

总结:监听器是程序和用户(或系统)交互的桥梁。

b:数据适配器

作用:把复杂的数据(数组,链表,数据库,集合等)填充在指定视图界面上。

ArrayAdapter(数组适配器):用于绑定格式单一的数据。

数据源:可以是集合或数组。

SimpleAdapter(简单适配器):用于绑定格式复杂的数据。

数据源:只能是特定泛型的集合。

实现过程:新建适配器—>添加数据源到适配器—>视图加载适配器。

总结:数据适配器是连接数据源和视图界面的桥梁。

3,需要两个xml视图布局,一个用作总布局文件(main.xml),一个用作每一个列表项所所对应的布局文件(item.xml):

a,总布局文件main.xml中的代码:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

<ListView

android:id="@+id/lv"

android:layout_width="match_parent"

android:layout_height="wrap_content" >

</ListView>

</LinearLayout>

b,每一个列表项所所对应的布局文件item.xml中的代码:

<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/pic"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="15dp"

android:src="@drawable/ic_launcher" />

<TextView

android:id="@+id/text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="这是一个ListView演示"

android:textSize="20sp"

android:textColor="#000000"/>

</LinearLayout>

4,java实现类中的代码:

public
class MainActivity extends Activity implements OnItemClickListener,OnScrollListener{

private ListView listView;

private ArrayAdapter<String>arr_adapter;

private SimpleAdapter simp_adapter;

private List<Map<String,Object>>dataList;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

listView=(ListView) findViewById(R.id.lv);

//1,新建一个数组适配器

//ArrayAdapter(上下文,当前ListView加载的每一个列表项所所对应的布局文件,数据源)

/*

* SimpleAdapter中的参数解析:

* 1,context:上下文

* 2,data:数据源(List<? extends Map<String, ?>> data)一个Map所组成的list集合

* 每个Map都会对应ListView列表中的一行

* 每个Map(键-值对)中的键必须包含所有在from中所指定的键

* 3,resource:列表项所对应的布局文件ID

* 4,from:Map中的键名

* 5,to:绑定数据视图中的ID,与from成对应关系

*/

//2,适配器加载数据源

String[] arr_data={"开心的一天1","开心的一天2","开心的一天3","开心的一天4","开心的一天5"};

dataList=new ArrayList<Map<String,Object>>();

arr_adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr_data);

simp_adapter=new SimpleAdapter(this, getData(), R.layout.item, new String[]{"pic","text"}, new int[]{R.id.pic,R.id.text});

//3,视图(ListView)加载适配器

//listView.setAdapter(arr_adapter);

listView.setAdapter(simp_adapter);

//4,设置视图(ListView)监听器

listView.setOnItemClickListener(this);

listView.setOnScrollListener(this);

}

//通过getData()方法来获取数据源

private List<Map<String,Object>> getData() {

for(int i=0;i<20;i++){

Map<String,Object>map=new HashMap<String,Object>();

map.put("pic",R.drawable.ic_launcher);

map.put("text","开心的一天"+i);

dataList.add(map);

}

return dataList;

}

@Override

public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) {

// TODO Auto-generated method stub

}

//监听ListView的滚动事件(手指在屏幕上滑动时的不同状态)

//可通过LogCat进行查看

@Override

public void onScrollStateChanged(AbsListView view, int scrollState) {

// TODO Auto-generated method stub

switch (scrollState)

{

case SCROLL_STATE_FLING:

Log.i("Main","用户在手指离开屏幕之前,由于用力滑了一下,视图仍依靠惯性继续滑动");

//实现下拉刷新的功能

Map<String,Object>map=new HashMap<String, Object>();

map.put("pic", R.drawable.aa);

map.put("text", "这是下拉刷新项");

dataList.add(map);

//通知UI线程进行刷新操作

simp_adapter.notifyDataSetChanged();

break;

case SCROLL_STATE_IDLE:

Log.i("Main","视图已经停止滑动");

break;

case SCROLL_STATE_TOUCH_SCROLL:

Log.i("Main","手指没有离开屏幕,视图正在滑动");

break;

}

}

@Override

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

// TODO Auto-generated method stub

String text=listView.getItemAtPosition(position)+"";

Toast.makeText(this, "position="+position+" text="+text, Toast.LENGTH_SHORT).show();

}

}

5,没有下拉刷新的效果:



下拉刷新后的效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: