• pulltorefresh学习


    http://blog.csdn.net/harvic880925/article/details/17680305

    下面的内容转自

    http://blog.csdn.net/duguang77/article/details/40921601

    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"
        tools:context="com.example.testpulltoreresh.MainActivity" >
    
        <com.handmark.pulltorefresh.library.PullToRefreshListView
            android:id="@+id/pl_refresh"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </RelativeLayout>
    

      

    2.设置PullToRefresh的监听事件

    mPullList.setOnRefreshListener(new OnRefreshListener2() {
    
    			@Override
    			public void onPullDownToRefresh(PullToRefreshBase refreshView) {
    				// 下拉刷新触发的事件
    				//获取格式化的时间
    				String label = DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(),
    						DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);
    
    				//	更新LastUpdatedLabel
    				refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);
    				
    				///开启线程模拟调接口填充数据
    				new GetDataTask().execute();
    			}
    
    			@Override
    			public void onPullUpToRefresh(PullToRefreshBase refreshView) {
    				// 上提加载触发的事件
    				///开启线程模拟调接口填充数据
    				new GetDataTask().execute();
    			}
    		});
    

      

    3.设置下拉,上提功能是否可用

    // 设置PullToRefreshListView的模式
    		//Mode.DISABLED 禁用所有ListView动作和刷新处理
    		//Mode.MANUAL_REFRESH_ONLY 被废弃的动作,禁用下拉动作处理,但是允许通过手动设置刷新状态
    		//Mode.PULL_DOWN_TO_REFRESH 被废弃的动作,只有下拉动作
    		//Mode.PULL_UP_TO_REFRESH  被废弃的动作,只有上提动作
    		
    		//Mode.PULL_FROM_END 只有上拉动作
    		//Mode.PULL_FROM_START 只允许用户将从一开始就可刷新视图刷新。一开始是顶部或离开时,根据滚动方向。只有下拉动作
    		//Mode.BOTH 下拉上提所有动作
    		mPullList.setMode(Mode.BOTH);
    

     或者是通过XML文件直接设置MODE属性:

    ptr:ptrMode="both"
    

     不过要注意要加入命名空间

    xmlns:ptr="http://schemas.android.com/apk/res-auto"
    

      

    <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"
        tools:context="com.example.testpulltoreresh.MainActivity" >
    
        <com.handmark.pulltorefresh.library.PullToRefreshListView
            xmlns:ptr="http://schemas.android.com/apk/res-auto"
            android:id="@+id/pl_refresh"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:cacheColorHint="#00000000"
            android:divider="#19000000"
            android:dividerHeight="0.5dp"
            android:fadingEdge="none"
            android:fastScrollEnabled="false"
            android:footerDividersEnabled="false"
            android:headerDividersEnabled="false"
            android:smoothScrollbar="true"
            ptr:ptrMode="both"/>
    
    </RelativeLayout>
    

      

    4.设置下拉,上提加载的提示

    		// 设置PullRefreshListView上提加载时的加载提示
    		mPullList.setMode(Mode.BOTH);
    		mPullList.getLoadingLayoutProxy(false, true).setPullLabel("上拉加载...");
    		mPullList.getLoadingLayoutProxy(false, true).setRefreshingLabel("正在加载...");
    		mPullList.getLoadingLayoutProxy(false, true).setReleaseLabel("松开加载更多...");
    
    		// 设置PullRefreshListView下拉加载时的加载提示
    		mPullList.getLoadingLayoutProxy(true, false).setPullLabel("下拉刷新...");
    		mPullList.getLoadingLayoutProxy(true, false).setRefreshingLabel("正在加载...");
    		mPullList.getLoadingLayoutProxy(true, false).setReleaseLabel("松开加载更多...");
    

     

    5.设置下拉,上提刷新的加载动画

    ptr:ptrAnimationStyle="flip" 翻转动画
    

     

    <pre name="code" class="java">ptr:ptrAnimationStyle="rotate"
    <span style="white-space:pre">	</span>旋转动画
    

     

        <com.handmark.pulltorefresh.library.PullToRefreshListView
            xmlns:ptr="http://schemas.android.com/apk/res-auto"
           .......................
            ptr:ptrAnimationStyle="flip"/>
    

    6.更改下拉时的icon

        <com.handmark.pulltorefresh.library.PullToRefreshListView
            xmlns:ptr="http://schemas.android.com/apk/res-auto"
            ........
            ptr:ptrDrawable="@drawable/ic_rockets" />
    

    7.其他的一些常用属性

    //设置整个mPullRefreshListView的背景色
    		ptrRefreshableViewBackground 
    		
    		//设置下拉Header或者上拉Footer的背景色
    		ptrHeaderBackground 
    		
    		//用于设置Header与Footer中文本的颜色
    		ptrHeaderTextColor 
    		
    		//用于设置Header与Footer中上次刷新时间的颜色
    		ptrHeaderSubTextColor 
    		
    		//如果为true会在mPullRefreshListView中出现icon,右上角和右下角,挺有意思的。
    		ptrShowIndicator
    		
    		//下面两个分别设置拉Header或者上拉Footer中字体的类型颜色等等。
    		ptrHeaderTextAppearance,ptrSubHeaderTextAppearance
    		
    		//当动画设置为rotate时,下拉是是否旋转。
    		ptrRotateDrawableWhilePulling
    		
    		//刷新的时候,是否允许ListView或GridView滚动。觉得为true比较好。
    		ptrScrollingWhileRefreshingEnabled
    		
    		//决定了Header,Footer以何种方式加入mPullRefreshListView,true为headView方式加入,就是滚动时刷新头部会一起滚动。
    		ptrListViewExtrasEnabled 
    		
    		//最后2个其实对于用户体验还是挺重要的,如果设置的时候考虑下。其他的属性自己选择就好。
    		//注:上述属性很多都可以代码控制,如果有需要可以直接mPullRefreshListView.set属性名 查看
    		//以上为PullToRefresh所有支持的属性~~
    

     

    Demo工程的所有代码 

    public class MainActivity extends Activity {
    
    	private PullToRefreshListView mPullList;
    	private LinkedList<String> mListItems;
    	private ArrayAdapter<String> mAdapter;
    	
    	private String[] mStrings = { "我很善良", "我很温柔", "我是淘女郎", 
    			"我是阿里郎", "我是大灰狼","我是羊羊羊" };
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		initView();
    		setEventListener();
    		initData();
    	}
    
    	/**
    	 * 初始化控件
    	 */
    	private void initView() {
    		mPullList = (PullToRefreshListView) findViewById(R.id.pl_refresh);
    
    	}
    
    	/**
    	 * 设置监听
    	 */
    	private void setEventListener() {
    		mPullList.setOnRefreshListener(new OnRefreshListener2() {
    
    			@Override
    			public void onPullDownToRefresh(PullToRefreshBase refreshView) {
    				// 下拉刷新触发的事件
    				//获取格式化的时间
    				String label = DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(),
    						DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);
    
    				//	更新LastUpdatedLabel
    				refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);
    				
    				///开启线程模拟调接口填充数据
    				new GetDataTask().execute();
    			}
    
    			@Override
    			public void onPullUpToRefresh(PullToRefreshBase refreshView) {
    				// 上提加载触发的事件
    				///开启线程模拟调接口填充数据
    				new GetDataTask().execute();
    			}
    		});
    
    	}
    
    	/**
    	 * 初始化数据
    	 */
    	private void initData() {
    		// 设置PullToRefreshListView的模式
    		mPullList.setMode(Mode.BOTH);
    
    		// 设置PullRefreshListView上提加载时的加载提示
    		mPullList.setMode(Mode.BOTH);
    		mPullList.getLoadingLayoutProxy(false, true).setPullLabel("上拉加载...");
    		mPullList.getLoadingLayoutProxy(false, true).setRefreshingLabel("正在加载...");
    		mPullList.getLoadingLayoutProxy(false, true).setReleaseLabel("松开加载更多...");
    
    		// 设置PullRefreshListView下拉加载时的加载提示
    		mPullList.getLoadingLayoutProxy(true, false).setPullLabel("下拉刷新...");
    		mPullList.getLoadingLayoutProxy(true, false).setRefreshingLabel("正在加载...");
    		mPullList.getLoadingLayoutProxy(true, false).setReleaseLabel("松开加载更多...");
    		
    		mListItems = new LinkedList<String>();
    		mListItems.addAll(Arrays.asList(mStrings));
    
    		mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mListItems);
    		mPullList.setAdapter(mAdapter);
    
    	}
    	
    	private class GetDataTask extends AsyncTask<Void, Void, String[]> {
    
    		@Override
    		protected String[] doInBackground(Void... params) {
    			try {
    				Thread.sleep(2000);
    			} catch (InterruptedException e) {
    			}
    			return null;
    		}
    
    		@Override
    		protected void onPostExecute(String[] result) {
    			if(mPullList.isHeaderShown()){
    				mListItems.addFirst("我是新纳入的妾——下拉刷新");
    			}else if(mPullList.isFooterShown()){
    				mListItems.addLast("我是让你重回怀抱的妾——上提加载");
    			}
    		
    			mAdapter.notifyDataSetChanged();
    
    			// 调用刷新完成
    			mPullList.onRefreshComplete();
    
    			super.onPostExecute(result);
    		}
    	}
    	
    	
    
    }
    

      

  • 相关阅读:
    char varchar nchar nvarchar text ntext区别
    Bindable 使用
    ShareObject离线存储相关
    as CPU 优化【转】
    as类收集(转)
    TweenLite 使用简介
    34个有用的ActionScript 3.0的API【转】
    as类库
    【转】A*寻路
    IOS学习笔记34—EGOTableViewPullRefresh实现下拉刷新
  • 原文地址:https://www.cnblogs.com/chuiyuan/p/4090843.html
Copyright © 2020-2023  润新知