Android中实现下拉刷新

企鹅博客 2019年7月14日22:22:35 发表评论 142 views

需求:项目中的消息列表界面要求实现类似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下面列出);

效果

代码

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. }

除非注明,否则均为@企鹅博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.qieseo.com/176738.html

weinxin
欢迎加入中国SEO站长博客之家
本站的所有资源都会上传分享到博客之家,希望大家互相学习交流进步。
企鹅博客

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: