又是好长时间没写博客了,今天用到了下拉刷新下拉加载,总结了下也看了下源码,把下拉刷新搞懂了,上拉加载还在看,今天就不说原理了,而是说一下应该怎么用,其实pullToRefreshView很简单只要把准备工作做好就好了
一、上拉刷新下拉加载的实现
3.源码
package com.example.pulltorefreshpractice; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.LinkedList; import java.util.List; import com.example.ui.PullToRefreshBase; import com.example.ui.PullToRefreshBase.OnRefreshListener; import com.example.ui.PullToRefreshListView; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.text.format.DateUtils; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; public class MainActivity extends Activity { private PullToRefreshListView ptrlv_test; private LinkedList<String> mListItem; private ArrayAdapter<String> mAdapter; private ListView mListView; private boolean isPullDownRefresh=true;//判断是下拉,还是上拉的标记 private int mCurrentIndex=0;//当前条目的位置 private static final int oneLoadCount=20;//每一次加载条目的个数 private SimpleDateFormat mDateFormat = new SimpleDateFormat("MM-dd HH:mm");//日期格式 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListItem=new LinkedList<String>(); mListItem.addAll(Arrays.asList(mStrings).subList(0,oneLoadCount));//从总体中截取一次加载的条目个数进行加载 ptrlv_test=(PullToRefreshListView) findViewById(R.id.ptrlv_test); //设置当前上拉加载不可用 ptrlv_test.setPullLoadEnabled(false); //设置下拉刷新可用 ptrlv_test.setPullRefreshEnabled(true); //设置上拉加载可用 ptrlv_test.setPullLoadEnabled(true); //滑到底部是否自动加载数据,这句话一定要加要不然"已经到底啦"显示不出来 ptrlv_test.setScrollLoadEnabled(true); //得到真正的listview,我们在给listview设置adapter时或者设置onItemClick事件必须通过它,而不能用ptrlv_test mListView = ptrlv_test.getRefreshableView(); mCurrentIndex=oneLoadCount; mAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,mListItem); mListView.setAdapter(mAdapter); //设置刷新监听器 ptrlv_test.setOnRefreshListener(new OnRefreshListener<ListView>() { @Override public void onPullDownToRefresh( PullToRefreshBase<ListView> refreshView) { isPullDownRefresh=true; new getMoreDateTask().execute(); } @Override public void onPullUpToRefresh( PullToRefreshBase<ListView> refreshView) { isPullDownRefresh=false; new getMoreDateTask().execute(); } }); setLastUpdateTime(); } private void setLastUpdateTime() { String text = formatDateTime(System.currentTimeMillis()); ptrlv_test.setLastUpdatedLabel(text); } private String formatDateTime(long time) { if (0 == time) { return ""; } return mDateFormat.format(new Date(time)); } //异步加载数据 private class getMoreDateTask extends AsyncTask<Void, Void, String []>{ @Override protected String[] doInBackground(Void... params) { try { Thread.sleep(2000);//模拟加载数据 } catch (InterruptedException e) { e.printStackTrace(); } return mStrings; } @Override protected void onPostExecute(String[] result) { super.onPostExecute(result); boolean hasMoreData=true; //判断是上拉,还是下拉 if(isPullDownRefresh){ mListItem.addFirst("刷新增加的数据"); }else{ //如果是上拉加载从当前条目position+oneLoadCount即在原有的基础上增加onLoadCount个条目 int start=mCurrentIndex; int end=start+oneLoadCount; if(end>=mStrings.length){ end=mStrings.length; hasMoreData=false; } for(int i=start;i<end;i++){ mListItem.add(mStrings[i]); } mCurrentIndex=end; } mAdapter.notifyDataSetChanged(); ptrlv_test.onPullDownRefreshComplete(); ptrlv_test.onPullUpRefreshComplete(); //把当前是否是有数据的状态传过去 ptrlv_test.setHasMoreData(hasMoreData); } } public static final String[] mStrings = { "1", "2", "3", "4", "5","6", "7", "8", "9", "10", "11","12", "13", "14", "15", "16","17", "18", "19", "20", "21","22", "23", "24", "25", "26","27", "28", "29", "30", "31", "32","33", "34", "35", "36", "37", "38", "39","40", "41", "42", "43", "44","45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56","57", "58", "59", "60", "61", "62", "63", "64", "65","66", "67", "68", "69","70", "71", "72", "73", "74","75", "76", "77", "78", "79", "80", "81", "82", "83", "84","85", "86", "87", "88", "89", "90", "91", "92", "93", "94","95", "96", "97", "98","99", "100", "101", "102","103", "104", "105", "106", "107", "108","109", "110", "111", "112", "113", "114", "115","116", "117", "118", "119", "120", "121", "122", "123", "124", "125","126", "127", "128", "129","130", "131", "132", "133", "134","135", "136", "137", "138","139", "140", "141", "142", "143","144", "145", "146", "147", "148","149", "150", "151", "152", "153","154", "155", "156", "157", "158", "159","160", "161", "162", "163","164", "165", "166", "167", "168","169", "170", "171", "172", "173","174", "175", "176", "177", "178","179", "180", "181", "182", "183","184", "185", "186", "187","188", "189", "190", "191", "192","193", "194", "195", "196", "197","198", "199", "200", "201","202", "203", "204", "205", "206", "207","208", "209", "210", "211", "212","213", "214", "215", "216", "217","218", "219", "220", "221", "222","223", "224", "225", "226", "227", "228","229", "230", "231", "232", "233","234", "235", "236", "237","238", "239", "240", "241", "242","243", "244", "245", "246","247", "248", "249", "250", "251","252", "253", "254", "255", "256", "257","258", "259", "260", "261", "262", "263", "264", "265","266", "267", "268", "269","270", "271", "272", "273", "274", "275","276", "277", "278", "279", "280", "281", "282","283", "284", "285", "286","287", "288", "289", "290", "291","292", "293", "294", "295", "296","297", "298", "299", "300" }; }
大家可以把源码下载下来把上面我说的需要导入项目的类和资源文件保存起来,下次用到直接拿来用,就可以了
下载源码请点击