Android中实现下拉刷新

TTHHVV 2012-11-18

需求:项目中的消息列表界面要求实现类似sina微博的下拉刷新;

思路:一般的消息列表为ListView类型,将list加载到adapter中,再将adapter加载到ListView中,从而实现消息列表的展示。而下拉刷新要求给消息列表加一个头部,其中有图片(向上/向下箭头)和提示字样(下拉刷新/松开刷新),从而我们需要做的事情:1.需要做一个head.xm来实现头部的样式定义;2.需要自定义一个继承了ListView的MsgListView,在该类中将head加在MsgListView对象的头部;3.将原有的消息界面布局文件中的ListView改为cn.xd.microblogging.tools.MsgListView(包名.MsgListView);4.将原有的消息界面后台代码中创建的ListView对象改为MsgListView对象,注意消息界面Activity要继承ListActivity,并且实现其刷新监听。

说明:实现下拉刷新很简单,仅需要4个文件:MsgRcvListActivity.java(消息列表界面的后台文件,真正的刷新动作在这里完成,下拉刷新相关code下面列出),msgrcvlistactivity.xml(消息列表界面的前台文件,下拉刷新相关code下面列出),MsgListView.java(本文件拿来主义即可不用改,下拉刷新自定义的列表类,监听并执行下拉刷新、松开刷新、正在刷新、完成刷新等状态的改变,但真正的刷新动作不在这里完成,完整code下面列出),head.xml(本文件拿来主义即可不用改,下拉刷新的样式定义文件,包括向上、向下箭头,刷新状态提示等,完整code下面列出);

效果

Android中实现下拉刷新

代码

1.MsgRcvListActivity.java :

  1. publicclass MsgRcvListActivity extends ListActivity {//注意:要继承ListActivity
  2. …………//变量定义,略
  3. MsgListView list;
  4. @Override
  5. protectedvoid onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.msgrcvlistactivity);
  8. list=(MsgListView)findViewById(Android.R.id.list);//继承ListActivity,id要写成android.R.id.list,否则报异常
  9. …………//其他代码,略
  10. //刷新监听,此处实现真正刷新
  11. list.setonRefreshListener(new OnRefreshListener() {
  12. publicvoid onRefresh() {
  13. new AsyncTask<Void, Void, Void>() {
  14. protected Void doInBackground(Void... params) {
  15. try {
  16. Thread.sleep(1000);
  17. } catch (Exception e) {
  18. e.printStackTrace();
  19. }
  20. returnnull;
  21. }
  22. @Override
  23. protectedvoid onPostExecute(Void result) {
  24. adapter.notifyDataSetChanged();
  25. new MsgLoad().execute();//刷新监听中,真正执行刷新动作
  26. list.onRefreshComplete();
  27. }
  28. }.execute(null);
  29. }
  30. });
  31. list.setItemsCanFocus(false);
  32. list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
  33. }
  34. …………//其他代码,略
  35. publicclass MsgLoad extends AsyncTask<Void, Void, List<MsgBean>> {
  36. …………//其他代码,略
  37. }
  38. }

 

 

  1. publicclass MsgRcvListActivity extends ListActivity {//注意:要继承ListActivity
  2. …………//变量定义,略
  3. MsgListView list;
  4. @Override
  5. protectedvoid onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.msgrcvlistactivity);
  8. list=(MsgListView)findViewById(android.R.id.list);//继承ListActivity,id要写成android.R.id.list,否则报异常
  9. …………//其他代码,略
  10. //刷新监听,此处实现真正刷新
  11. list.setonRefreshListener(new OnRefreshListener() {
  12. publicvoid onRefresh() {
  13. new AsyncTask<Void, Void, Void>() {
  14. protected Void doInBackground(Void... params) {
  15. try {
  16. Thread.sleep(1000);
  17. } catch (Exception e) {
  18. e.printStackTrace();
  19. }
  20. returnnull;
  21. }
  22. @Override
  23. protectedvoid onPostExecute(Void result) {
  24. adapter.notifyDataSetChanged();
  25. new MsgLoad().execute();//刷新监听中,真正执行刷新动作
  26. list.onRefreshComplete();
  27. }
  28. }.execute(null);
  29. }
  30. });
  31. list.setItemsCanFocus(false);
  32. list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
  33. }
  34. …………//其他代码,略
  35. publicclass MsgLoad extends AsyncTask<Void, Void, List<MsgBean>> {
  36. …………//其他代码,略
  37. }

相关推荐

BeiHaiZuoPeng / 0评论 2011-10-18
huningjun / 0评论 2011-10-14