首页 > 代码库 > Android开源--PullToRefresh
Android开源--PullToRefresh
开源地址: https://github.com/chrisbanes/Android-PullToRefresh
简介:PullToRefresh是一款支持ListView,GridView,ViewPager,ScrollView,WebView等一切可以拖动,并实现上下左右拖动刷新数据的框架,废话不多说,上代码;
[基本的android依赖项目存放在library中,支持fragment列表,ViewPager列表的存放在extras包中]
[依赖项目导入如左图]
1.支持ListView的实现:
1)XML实现
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <com.handmark.pulltorefresh.library.PullToRefreshListView android:id="@+id/my_ptr_lv" android:layout_width="match_parent" android:layout_height="match_parent" android:cacheColorHint="#0000" android:divider="#0FF" android:dividerHeight="1dp" android:smoothScrollbar="true" android:fastScrollEnabled="false" android:footerDividersEnabled="false" android:headerDividersEnabled="false" /> </RelativeLayout>
2)JAVA代码
public class PullListSampleActivity extends Activity { private PullToRefreshListView mPullToRefreshLv; private ArrayAdapter<String> mAdapter; private LinkedList<String> mListItems; private String[] mStrings = { "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi", "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre", "Allgauer Emmentaler", "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi", "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre", "Allgauer Emmentaler" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pull_list_sample); //填充数据 mPullToRefreshLv=(PullToRefreshListView) findViewById(R.id.my_ptr_lv); mListItems=new LinkedList<String>(Arrays.asList(mStrings)); mAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,android.R.id.text1,mListItems); mPullToRefreshLv.setAdapter(mAdapter); //下拉刷新的声音支持 SoundPullEventListener<ListView> soundPullEventListener=new SoundPullEventListener<ListView>(this); soundPullEventListener.addSoundEvent(State.PULL_TO_REFRESH, R.raw.pull_event); soundPullEventListener.addSoundEvent(State.REFRESHING, R.raw.refreshing_sound); soundPullEventListener.addSoundEvent(State.RESET, R.raw.reset_sound); mPullToRefreshLv.setOnPullEventListener(soundPullEventListener); //刷新时调用的监听器 mPullToRefreshLv.setOnRefreshListener(new OnRefreshListener<ListView>() { @Override public void onRefresh(PullToRefreshBase<ListView> refreshView) { String label=DateUtils.formatDateTime(PullListSampleActivity.this, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL); //设置头部Label mPullToRefreshLv.getLoadingLayoutProxy().setLastUpdatedLabel(label); new GetListDataTask().execute(); } }); mPullToRefreshLv.setOnLastItemVisibleListener(new OnLastItemVisibleListener() { @Override public void onLastItemVisible() { Toast.makeText(PullListSampleActivity.this,"all data loaded !", 800).show(); } }); } class GetListDataTask extends AsyncTask<Void, Void, String[]>{ @Override protected String[] doInBackground(Void... params) { //mock get datas try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } return mStrings; } @Override protected void onPostExecute(String[] result) { mListItems.addAll(Arrays.asList(result)); mAdapter.notifyDataSetChanged(); //手动关闭头部 mPullToRefreshLv.onRefreshComplete(); super.onPostExecute(result); } } }
2.支持GridView
1)XML实现
ptr:ptrMode="both"表示上下/左右都可以刷新
ptr:ptrDrawable表示刷新时显示的图标
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <com.handmark.pulltorefresh.library.PullToRefreshGridView xmlns:ptr="http://schemas.android.com/apk/res-auto" android:id="@+id/my_ptr_gv" android:layout_width="match_parent" android:layout_height="match_parent" android:cacheColorHint="#0000" android:divider="#0FF" android:dividerHeight="1dp" android:smoothScrollbar="true" android:fastScrollEnabled="false" android:footerDividersEnabled="false" android:headerDividersEnabled="false" android:numColumns="auto_fit" ptr:ptrMode="both" ptr:ptrDrawable="@drawable/default_ptr_rotate" /> </RelativeLayout>
2)JAVA代码实现
public class PullGridSampleActivity extends Activity { private PullToRefreshGridView mPullToRefreshGridView; private ArrayAdapter<String> mAdapter; private LinkedList<String> mListItems; private String[] mStrings = { "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi", "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale", "Aisy Cendre", "Allgauer Emmentaler" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pull_grid_sample); mPullToRefreshGridView=(PullToRefreshGridView) findViewById(R.id.my_ptr_gv); mListItems=new LinkedList<String>(); mAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, android.R.id.text1,mListItems); mPullToRefreshGridView.setAdapter(mAdapter); //支持当没有数据的时候替代的View 具体代码根据自己的业务 TextView textView=new TextView(this); LayoutParams params=new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT); params.gravity=Gravity.CENTER; textView.setLayoutParams(params); textView.setText("The data is empty !"); mPullToRefreshGridView.setEmptyView(textView); SoundPullEventListener<GridView> pullEventListener=new SoundPullEventListener<GridView>(this); pullEventListener.addSoundEvent(State.PULL_TO_REFRESH,R.raw.pull_event); pullEventListener.addSoundEvent(State.RESET,R.raw.reset_sound); pullEventListener.addSoundEvent(State.REFRESHING,R.raw.refreshing_sound); mPullToRefreshGridView.setOnPullEventListener(pullEventListener); mPullToRefreshGridView.setOnRefreshListener(new OnRefreshListener2<GridView>() { @Override public void onPullDownToRefresh( PullToRefreshBase<GridView> refreshView) { String label=DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(),DateUtils.FORMAT_24HOUR); refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); new GetDataTask().execute(); } @Override public void onPullUpToRefresh( PullToRefreshBase<GridView> refreshView) { String label=DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(),DateUtils.FORMAT_24HOUR); refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); new GetDataTask().execute(); } }); } class GetDataTask 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) { mListItems.addAll(Arrays.asList(result)); mAdapter.notifyDataSetChanged(); mPullToRefreshGridView.onRefreshComplete(); } } }
3.对ViewPager的实现
1)XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <com.handmark.pulltorefresh.extras.viewpager.PullToRefreshViewPager xmlns:ptr="http://schemas.android.com/apk/res-auto" android:id="@+id/my_ptr_viewpager" android:layout_width="match_parent" android:layout_height="match_parent" ptr:ptrAnimationStyle="flip" ptr:ptrMode="both" ptr:ptrHeaderBackground="#FFFF" /> </RelativeLayout>
2)Java实现
public class PullViewPagerSample extends Activity implements OnRefreshListener<ViewPager>{ private PullToRefreshViewPager mPullToRefreshViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pull_viewpager_sample); mPullToRefreshViewPager=(PullToRefreshViewPager) findViewById(R.id.my_ptr_viewpager); mPullToRefreshViewPager.getRefreshableView().setAdapter(new MyPagerAdapter()); mPullToRefreshViewPager.setOnRefreshListener(this); } class MyPagerAdapter extends PagerAdapter{ private final int[] sDrawables = { R.drawable.wallpaper, R.drawable.wallpaper, R.drawable.wallpaper, R.drawable.wallpaper, R.drawable.wallpaper, R.drawable.wallpaper }; @Override public int getCount() { return sDrawables.length; } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imageView=new ImageView(container.getContext()); imageView.setImageResource(sDrawables[position]); container.addView(imageView,LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT); return imageView; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0==(View)arg1; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } } @Override public void onRefresh(PullToRefreshBase<ViewPager> refreshView) { try { Thread.sleep(4000);//模拟加载时间 } catch (InterruptedException e) { e.printStackTrace(); } mPullToRefreshViewPager.onRefreshComplete(); } }
Android开源--PullToRefresh
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。