Android学习之开源项目PullToRefresh的使用


  • 首先 下载 Android-PullToRefresh-master


    下载地址 https://github.com/chrisbanes/Android-PullToRefresh

    下载之后将其解压


    现在 我们用eclipse 创建一个项目取名PullToRefresh

    将上面的library 引入我们的项目

    引入成功之后打开项目的project.properties文件我们可以看到

    android.library.reference.1=../Android-PullToRefresh-master/library

    这样就表示可以引用成功了

    我们在res/layout创建 布局文件main.xml

    01. <?xml version="1.0" encoding="utf-8"?>
    02. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    03. android:layout_width="match_parent"
    04. android:layout_height="match_parent"
    05. android:background="#FFFFFF"
    06. android:orientation="vertical" >
    07.  
    08. <!--  xmlns:ptr = "http://schemas.android.com/apk/res-auto"  为我们要使用PullToRefresh 里面一些属性需要引的命名空间 -->
    09. <com.handmark.pulltorefresh.library.PullToRefreshListView
    11. android:id="@+id/pull_refresh_list"
    12. android:layout_width="fill_parent"
    13. android:layout_height="fill_parent"
    14. android:dividerHeight="4dp"
    15. android:fadingEdge="none"
    16. android:fastScrollEnabled="false"
    17. android:footerDividersEnabled="false"
    18. android:headerDividersEnabled="false"
    19. android:smoothScrollbar="true"
    20. ptr:ptrMode="both"
    21. />
    22. </LinearLayout>


    接着创建 MainActivity.java

    001. package com.pulltorefresh;
    002.  
    003. import java.util.Arrays;
    004. import java.util.LinkedList;
    005.  
    006. import android.app.Activity;
    007. import android.os.AsyncTask;
    008. import android.os.Bundle;
    009. import android.widget.ArrayAdapter;
    010. import android.widget.ListView;
    011. import android.widget.Toast;
    012.  
    013. import com.handmark.pulltorefresh.library.PullToRefreshBase;
    014. import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2;
    015. import com.handmark.pulltorefresh.library.PullToRefreshBase.State;
    016. import com.handmark.pulltorefresh.library.PullToRefreshListView;
    017. import com.handmark.pulltorefresh.library.extras.SoundPullEventListener;
    018.  
    019.  
    020.  
    021. public class MainActivity extends Activity {
    022.  
    023.  
    024. static final int MENU_MANUAL_REFRESH = 0;
    025. static final int MENU_DISABLE_SCROLL = 1;
    026. static final int MENU_SET_MODE = 2;
    027. static final int MENU_DEMO = 3;
    028.  
    029. private LinkedList<String> mListItems;
    030. private PullToRefreshListView mPullRefreshListView;
    031. private ArrayAdapter<String> mAdapter;
    032.  
    033. @Override
    034. protected void onCreate(Bundle savedInstanceState) {
    035. super.onCreate(savedInstanceState);
    036. setContentView(R.layout.main);
    037. mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.pull_refresh_list);
    038.  
    039.  
    040. /**
    041. * 实现 接口  OnRefreshListener2<ListView>  以便与监听  滚动条到顶部和到底部
    042. */
    043. mPullRefreshListView.setOnRefreshListener(new OnRefreshListener2<ListView>() {
    044. @Override
    045. public void onPullDownToRefresh( PullToRefreshBase<ListView> refreshView) {
    046. Toast.makeText(MainActivity.this"onPullDownToRefresh", Toast.LENGTH_SHORT).show();
    047. new GetDataTask().execute();
    048. }
    049. @Override
    050. public void onPullUpToRefresh( PullToRefreshBase<ListView> refreshView) {
    051. Toast.makeText(MainActivity.this"onPullUpToRefresh", Toast.LENGTH_SHORT).show();
    052. new GetDataTask().execute();
    053. }
    054. });
    055.  
    056.  
    057.  
    058. ListView actualListView = mPullRefreshListView.getRefreshableView();
    059.  
    060. // Need to use the Actual ListView when registering for Context Menu
    061. registerForContextMenu(actualListView);
    062.  
    063. mListItems = new LinkedList<String>();
    064. mListItems.addAll(Arrays.asList(mStrings));
    065.  
    066. mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mListItems);
    067.  
    068. /**
    069. * Add Sound Event Listener
    070. */
    071.  
    072. /**
    073. *   设置下拉刷新和上拉加载时的 铃声(可有可无)
    074. */
    075. SoundPullEventListener<ListView> soundListener = new SoundPullEventListener<ListView>(this);
    076. soundListener.addSoundEvent(State.PULL_TO_REFRESH, R.raw.pull_event);
    077. soundListener.addSoundEvent(State.RESET, R.raw.reset_sound);
    078. soundListener.addSoundEvent(State.REFRESHING, R.raw.refreshing_sound);
    079. mPullRefreshListView.setOnPullEventListener(soundListener);
    080.  
    081. // You can also just use setListAdapter(mAdapter) or
    082. // mPullRefreshListView.setAdapter(mAdapter)
    083. actualListView.setAdapter(mAdapter);
    084.  
    085.  
    086.  
    087. }
    088. //模拟网络加载数据的   异步请求类
    089. //
    090. private class GetDataTask extends AsyncTask<Void, Void, String[]> {
    091.  
    092. //子线程请求数据
    093. @Override
    094. protected String[] doInBackground(Void... params) {
    095. // Simulates a background job.
    096. try {
    097. Thread.sleep(10);
    098. catch (InterruptedException e) {
    099. }
    100. return mStrings;
    101. }
    102.  
    103. //主线程更新UI
    104. @Override
    105. protected void onPostExecute(String[] result) {
    106.  
    107. //向RefreshListView Item 添加一行数据  并刷新ListView
    108. //mListItems.addLast("Added after refresh...");
    109. mListItems.addFirst("Added after refresh...");
    110. mAdapter.notifyDataSetChanged();
    111.  
    112. //通知RefreshListView 我们已经更新完成
    113. // Call onRefreshComplete when the list has been refreshed.
    114. mPullRefreshListView.onRefreshComplete();
    115.  
    116. super.onPostExecute(result);
    117. }
    118. }
    119.  
    120.  
    121.  
    122. //数据源
    123. private String[] mStrings = { "Abbaye de Belloc""Abbaye du Mont des Cats""Abertam""Abondance""Ackawi",
    124. "Acorn""Adelost""Affidelice au Chablis""Afuega'l Pitu""Airag""Airedale""Aisy Cendre",
    125. "Allgauer Emmentaler""Abbaye de Belloc""Abbaye du Mont des Cats""Abertam""Abondance""Ackawi",
    126. "Acorn""Adelost""Affidelice au Chablis""Afuega'l Pitu""Airag""Airedale""Aisy Cendre",
    127. "Allgauer Emmentaler" };
    128. }


    目前编码已经完成 我们测试一下

     

    到此我们学习完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值