Android開源--PullToRefresh

來源:互聯網
上載者:User

Android開源--PullToRefresh

 

簡介:PullToRefresh是一款支援ListView,GridView,ViewPager,ScrollView,WebView等一切可以拖動,並實現上下左右拖動重新整理資料的架構,廢話不多說,上代碼;

[基本的android依賴項目存放在library中,支援fragment列表,ViewPager列表的存放在extras包中]

 

[依賴項目匯入如左圖]

 

1.支援ListView的實現:

1)XML實現

 

 

 

2)JAVA代碼

 

public class PullListSampleActivity extends Activity {private PullToRefreshListView mPullToRefreshLv;private ArrayAdapter mAdapter;private LinkedList 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 };@Overrideprotected 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(Arrays.asList(mStrings));mAdapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,android.R.id.text1,mListItems);mPullToRefreshLv.setAdapter(mAdapter);//下拉重新整理的聲音支援SoundPullEventListener soundPullEventListener=new SoundPullEventListener(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() {@Overridepublic void onRefresh(PullToRefreshBase refreshView) {String label=DateUtils.formatDateTime(PullListSampleActivity.this, System.currentTimeMillis(),DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);//設定頭部LabelmPullToRefreshLv.getLoadingLayoutProxy().setLastUpdatedLabel(label);new GetListDataTask().execute();}});mPullToRefreshLv.setOnLastItemVisibleListener(new OnLastItemVisibleListener() {@Overridepublic void onLastItemVisible() {Toast.makeText(PullListSampleActivity.this,all data loaded !, 800).show();}});}class GetListDataTask extends AsyncTask{@Overrideprotected String[] doInBackground(Void... params) {//mock get datastry {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}return mStrings;}@Overrideprotected 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表示重新整理時顯示的表徵圖

 

    

2)JAVA代碼實現

 

 

public class PullGridSampleActivity extends Activity {private PullToRefreshGridView mPullToRefreshGridView;private ArrayAdapter mAdapter;private LinkedList 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 };@Overrideprotected 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();mAdapter=new ArrayAdapter(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 pullEventListener=new SoundPullEventListener(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() {@Overridepublic void onPullDownToRefresh(PullToRefreshBase refreshView) {String label=DateUtils.formatDateTime(getApplicationContext(),System.currentTimeMillis(),DateUtils.FORMAT_24HOUR);refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);new GetDataTask().execute();}@Overridepublic void onPullUpToRefresh(PullToRefreshBase refreshView) {String label=DateUtils.formatDateTime(getApplicationContext(),System.currentTimeMillis(),DateUtils.FORMAT_24HOUR);refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);new GetDataTask().execute();}});}class GetDataTask extends AsyncTask{@Overrideprotected String[] doInBackground(Void... params) {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return mStrings;}@Overrideprotected void onPostExecute(String[] result) {mListItems.addAll(Arrays.asList(result));mAdapter.notifyDataSetChanged();mPullToRefreshGridView.onRefreshComplete();}}}

3.對ViewPager的實現

1)XML

 

    

2)Java實現

 

 

public class PullViewPagerSample extends Activity implements OnRefreshListener{private PullToRefreshViewPager mPullToRefreshViewPager;@Overrideprotected 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 };@Overridepublic int getCount() {return sDrawables.length;}@Overridepublic 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;}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0==(View)arg1;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View) object);}}@Overridepublic void onRefresh(PullToRefreshBase refreshView) {try {Thread.sleep(4000);//類比載入時間} catch (InterruptedException e) {e.printStackTrace();}mPullToRefreshViewPager.onRefreshComplete();}}


 


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.