編輯:關於Android編程
簡介: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 ArrayAdaptermAdapter; 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 }; @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 (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 () { @Override public void onRefresh(PullToRefreshBase 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 { @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); } } }
1)XML實現
ptr:ptrMode=both表示上下/左右都可以刷新
ptr:ptrDrawable表示刷新時顯示的圖標
public class PullGridSampleActivity extends Activity { private PullToRefreshGridView mPullToRefreshGridView; private ArrayAdaptermAdapter; 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 }; @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 (); 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 () { @Override public void onPullDownToRefresh( PullToRefreshBase refreshView) { String label=DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(),DateUtils.FORMAT_24HOUR); refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); new GetDataTask().execute(); } @Override public 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 { @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
public class PullViewPagerSample extends Activity implements OnRefreshListener{ 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 refreshView) { try { Thread.sleep(4000);//模擬加載時間 } catch (InterruptedException e) { e.printStackTrace(); } mPullToRefreshViewPager.onRefreshComplete(); } }
本文實例講述了Android中Service實時向Activity傳遞數據的方法。分享給大家供大家參考。具體如下:這裡演示一個案例,需求如下:在Service組件中創建一
現在app基本都有推送的功能,於是看了下百度雲的推送,官方文檔和Demo都很到位,記錄下使用過程,目標是利用百度雲推送最為服務器寫個及時通訊的例子~當然了,
Android中所有控件都繼承自android.view.View,其中android.view.ViewGroup是View的一個重要子類,絕大部分的布局都繼承自Vie
一、基本知識點其實要完成這個功能很簡單:1、MainActivitystartActivityForResult(intent, 100);//第二個是請求碼@Overr