`

android 中listview滑动加载的简单demo

 
阅读更多
在使用listview时,滑动加载可以提高效率,增加用户体验。

主要用到一个OnScrollListener

Java代码 收藏代码
  1. /**
  2. *Theviewisnotscrolling.Notenavigatingthelistusingthetrackballcountsas
  3. *beingintheidlestatesincethesetransitionsarenotanimated.
  4. */
  5. publicstaticintSCROLL_STATE_IDLE=0;
  6. /**
  7. *Theuserisscrollingusingtouch,andtheirfingerisstillonthescreen
  8. */
  9. publicstaticintSCROLL_STATE_TOUCH_SCROLL=1;
  10. /**
  11. *Theuserhadpreviouslybeenscrollingusingtouchandhadperformedafling.The
  12. *animationisnowcoastingtoastop
  13. */
  14. publicstaticintSCROLL_STATE_FLING=2;
  15. /**
  16. *Callbackmethodtobeinvokedwhilethelistvieworgridviewisbeingscrolled.Ifthe
  17. *viewisbeingscrolled,thismethodwillbecalledbeforethenextframeofthescrollis
  18. *rendered.Inparticular,itwillbecalledbeforeanycallsto
  19. *{@linkAdapter#getView(int,View,ViewGroup)}.
  20. *
  21. *@paramviewTheviewwhosescrollstateisbeingreported
  22. *
  23. *@paramscrollStateThecurrentscrollstate.Oneof{@link#SCROLL_STATE_IDLE},
  24. *{@link#SCROLL_STATE_TOUCH_SCROLL}or{@link#SCROLL_STATE_IDLE}.
  25. */
  26. publicvoidonScrollStateChanged(AbsListViewview,intscrollState);
  27. /**
  28. *Callbackmethodtobeinvokedwhenthelistorgridhasbeenscrolled.Thiswillbe
  29. *calledafterthescrollhascompleted
  30. *@paramviewTheviewwhosescrollstateisbeingreported
  31. *@paramfirstVisibleItemtheindexofthefirstvisiblecell(ignoreif
  32. *visibleItemCount==0)
  33. *@paramvisibleItemCountthenumberofvisiblecells
  34. *@paramtotalItemCountthenumberofitemsinthelistadaptor
  35. */
  36. publicvoidonScroll(AbsListViewview,intfirstVisibleItem,intvisibleItemCount,
  37. inttotalItemCount);


Java代码 收藏代码
  1. packagecom.nico.listviewload;
  2. importjava.util.ArrayList;
  3. importjava.util.List;
  4. importcom.nico.bean.MsgInfo;
  5. importandroid.app.Activity;
  6. importandroid.os.AsyncTask;
  7. importandroid.os.Bundle;
  8. importandroid.os.Handler;
  9. importandroid.os.Message;
  10. importandroid.util.Log;
  11. importandroid.view.LayoutInflater;
  12. importandroid.view.View;
  13. importandroid.view.ViewGroup;
  14. importandroid.widget.AbsListView;
  15. importandroid.widget.BaseAdapter;
  16. importandroid.widget.LinearLayout;
  17. importandroid.widget.ListView;
  18. importandroid.widget.TextView;
  19. importandroid.widget.AbsListView.OnScrollListener;
  20. publicclassMainActivityextendsActivity{
  21. List<MsgInfo>infoList=null;
  22. privateLayoutInflaterinflater=null;
  23. privateListViewlistview=null;
  24. privatemyAdapteradapter=null;
  25. privateLinearLayoutftview=null;
  26. privateHandlerhandler=newHandler(){
  27. @Override
  28. publicvoidhandleMessage(Messagemsg){
  29. super.handleMessage(msg);
  30. switch(msg.what){
  31. case1:
  32. adapter.notifyDataSetChanged();
  33. try{
  34. Thread.sleep(2000l);
  35. }catch(InterruptedExceptione){
  36. e.printStackTrace();
  37. }
  38. setAdapter();
  39. break;
  40. }
  41. }
  42. };
  43. /**Calledwhentheactivityisfirstcreated.*/
  44. @Override
  45. publicvoidonCreate(BundlesavedInstanceState){
  46. super.onCreate(savedInstanceState);
  47. setContentView(R.layout.main);
  48. inflater=this.getLayoutInflater();
  49. listview=(ListView)findViewById(R.id.listview);
  50. ftview=(LinearLayout)inflater.inflate(R.layout.ftview,null);
  51. listview.addFooterView(ftview,null,false);
  52. listview.setAdapter(newmyAdapter());
  53. adapter=newmyAdapter();
  54. ftview.setVisibility(View.VISIBLE);
  55. listview.setOnScrollListener(newOnScrollListener(){
  56. @Override
  57. publicvoidonScrollStateChanged(AbsListViewview,intscrollState){
  58. if(scrollState==SCROLL_STATE_IDLE
  59. &&view.getLastVisiblePosition()==view.getCount()-1)
  60. {
  61. handler.sendEmptyMessage(1);
  62. }
  63. }
  64. @Override
  65. publicvoidonScroll(AbsListViewview,intfirstVisibleItem,
  66. intvisibleItemCount,inttotalItemCount){
  67. }
  68. });
  69. }
  70. publicList<MsgInfo>getList(){
  71. List<MsgInfo>infoList=newArrayList<MsgInfo>();
  72. for(inti=0;i<7;i++){
  73. MsgInfoinfo=newMsgInfo();
  74. info.id=i;
  75. info.detailinfo="这是第"+i+"条信息";
  76. info.name="第"+i+"项";
  77. info.size=1024*i;
  78. infoList.add(info);
  79. }
  80. returninfoList;
  81. }
  82. publicvoidsetData(){
  83. infoList=getList();
  84. }
  85. publicvoidsetAdapter(){
  86. for(inti=0;i<7;i++){
  87. MsgInfoinfo=newMsgInfo();
  88. info.id=i;
  89. info.detailinfo="这是第"+i+"条信息";
  90. info.name="第"+i+"项";
  91. info.size=1024*i;
  92. infoList.add(info);
  93. }
  94. adapter.notifyDataSetChanged();
  95. }
  96. publicclassmyAdapterextendsBaseAdapter{
  97. @Override
  98. publicvoidnotifyDataSetChanged(){
  99. if(ftview.getVisibility()==View.VISIBLE)
  100. {
  101. ftview.setVisibility(View.GONE);
  102. }
  103. elseif(ftview.getVisibility()==View.GONE)
  104. {
  105. ftview.setVisibility(View.VISIBLE);
  106. }
  107. super.notifyDataSetChanged();
  108. }
  109. TextViewname,detail,size;
  110. publicmyAdapter(){
  111. setData();
  112. }
  113. @Override
  114. publicintgetCount(){
  115. returninfoList.size();
  116. }
  117. @Override
  118. publicObjectgetItem(intposition){
  119. returninfoList.get(position);
  120. }
  121. @Override
  122. publiclonggetItemId(intposition){
  123. returnposition;
  124. }
  125. @Override
  126. publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
  127. if(convertView==null){
  128. convertView=inflater.inflate(R.layout.item,null,false);
  129. }
  130. name=(TextView)convertView.findViewById(R.id.name);
  131. detail=(TextView)convertView.findViewById(R.id.detail);
  132. size=(TextView)convertView.findViewById(R.id.size);
  133. name.setText(infoList.get(position).name);
  134. detail.setText(infoList.get(position).detailinfo);
  135. size.setText(infoList.get(position).size+"");
  136. returnconvertView;
  137. }
  138. }
  139. publicclassLoadAsyTaskextendsAsyncTask<String,String,String>{
  140. @Override
  141. protectedStringdoInBackground(String...params){
  142. for(inti=0;i<7;i++){
  143. MsgInfoinfo=newMsgInfo();
  144. info.id=i;
  145. info.detailinfo="这是第"+i+"条信息";
  146. info.name="第"+i+"项";
  147. info.size=1024*i;
  148. infoList.add(info);
  149. }
  150. returnnull;
  151. }
  152. @Override
  153. protectedvoidonPostExecute(Stringresult){
  154. super.onPostExecute(result);
  155. ftview.setVisibility(View.GONE);
  156. adapter.notifyDataSetChanged();
  157. }
  158. }
  159. }


Java代码 收藏代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"android:layout_height="match_parent">
  4. <LinearLayoutandroid:layout_width="fill_parent"android:gravity="center_horizontal"
  5. android:layout_height="wrap_content"android:layout_gravity="center_horizontal">
  6. <ImageViewandroid:layout_width="50dip"
  7. android:layout_height="50dip"
  8. android:src="@drawable/progressbar"android:id="@+id/pbdrawable"/>
  9. <TextViewandroid:layout_width="wrap_content"
  10. android:layout_height="wrap_content"android:text="请稍后..."android:id="@+id/pbtxt"/>
  11. </LinearLayout>
  12. </LinearLayout>


Java代码 收藏代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <rotatexmlns:android="http://schemas.android.com/apk/res/android"
  3. android:pivotX="50%"android:pivotY="50%"android:fromDegrees="0"
  4. android:toDegrees="360">
  5. <shapeandroid:shape="ring"android:innerRadiusRatio="3"
  6. android:thicknessRatio="8"android:useLevel="false">
  7. <gradientandroid:type="sweep"android:useLevel="false"
  8. android:startColor="#000000"android:centerColor="#FFFFFF"
  9. android:centerY="0.50"android:endColor="#000000"/>
  10. </shape>
  11. </rotate>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics