歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android中實現下拉刷新

需求:項目中的消息列表界面要求實現類似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. }
Copyright © Linux教程網 All Rights Reserved