湖南网站建设方案优化,网站可以做什么,网络设计,一个人做网站难吗PullToRefresh 是一个第三方的工程。 之前的自定义下拉刷新控件貌似不太好用#xff0c;于是网上找了这个。 参考#xff1a;http://www.cnblogs.com/summers/p/4343964.html 主要是一些功能都提供了接口#xff0c;不需要自己再写了。 废话不多说#xff0c;上干货。 1、布… PullToRefresh 是一个第三方的工程。 之前的自定义下拉刷新控件貌似不太好用于是网上找了这个。 参考http://www.cnblogs.com/summers/p/4343964.html 主要是一些功能都提供了接口不需要自己再写了。 废话不多说上干货。 1、布局文件 ?xml version1.0 encodingutf-8?
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android android:layout_widthmatch_parent android:layout_heightmatch_parent android:orientationvertical !-- ptr:ptrAnimationStyleflip flip:翻转 rotate:旋转-- !-- ptr:ptrShowIndicatortrue 右上角 右下角出现箭头-- com.handmark.pulltorefresh.library.PullToRefreshListView xmlns:ptrhttp://schemas.android.com/apk/res-auto android:idid/pullToRefresh android:layout_widthmatch_parent android:layout_heightwrap_content ptr:ptrDrawabledrawable/default_ptr_flip ptr:ptrAnimationStyleflip ptr:ptrHeaderBackground#383838 ptr:ptrHeaderTextColor#FFFFFF / /LinearLayout 其中有一些属性需要说明 ptr是pullToRefresh的配置属性 使用是需要添加 xmlns:ptrhttp://schemas.android.com/apk/res-auto ptr:ptrDrawable“” 上拉下拉图标 ptr:ptrAnimationStyle 图标动画 取值 flip:翻转 rotate旋转 ptr:ptrHeaderBackground 上拉下拉时 头部的背景色 ptr:ptrHeaderTextColor 上拉下拉时 文字颜色 ptrRefreshableViewBackground 设置整个mPullRefreshListView的背景色 ptrScrollingWhileRefreshingEnabled刷新的时候是否允许ListView或GridView滚动。觉得为true比较好。这个本人亲测不支持这个属性不知道为什么 ptrListViewExtrasEnabled 决定了HeaderFooter以何种方式加入mPullRefreshListViewtrue为headView方式加入就是滚动时刷新头部会一起滚动。这个本人亲测不支持这个属性不知道为什么 注上述属性都可以代码添加请用pullToRefresh.set查看 2、MainActivity代码 public class MainActivity extends ActionBarActivity { private PullToRefreshListView pullToRefresh; private ListPullBean data new ArrayListPullBean(); MyAdapter adapter; Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); pullToRefresh (PullToRefreshListView) findViewById(R.id.pullToRefresh); data getData(); adapter new MyAdapter(this); pullToRefresh.setAdapter(adapter); /* * Mode.BOTH同时支持上拉下拉 * Mode.PULL_FROM_START只支持下拉Pulling Down * Mode.PULL_FROM_END只支持上拉Pulling Up */ /* * 如果Mode设置成Mode.BOTH需要设置刷新Listener为OnRefreshListener2并实现onPullDownToRefresh()、onPullUpToRefresh()两个方法。 * 如果Mode设置成Mode.PULL_FROM_START或Mode.PULL_FROM_END需要设置刷新Listener为OnRefreshListener同时实现onRefresh()方法。 * 当然也可以设置为OnRefreshListener2但是Mode.PULL_FROM_START的时候只调用onPullDownToRefresh()方法 * Mode.PULL_FROM的时候只调用onPullUpToRefresh()方法. */ pullToRefresh.setMode(Mode.BOTH); init(); /* * setOnRefreshListener(OnRefreshListener listener):设置刷新监听器 * setOnLastItemVisibleListener(OnLastItemVisibleListener listener):设置是否到底部监听器 * setOnPullEventListener(OnPullEventListener listener);设置事件监听器 * onRefreshComplete()设置刷新完成 */ /* * pulltorefresh.setOnScrollListener() */ // SCROLL_STATE_TOUCH_SCROLL(1) 正在滚动 // SCROLL_STATE_FLING(2) 手指做了抛的动作手指离开屏幕前用力滑了一下 // SCROLL_STATE_IDLE(0) 停止滚动 /* * setOnLastItemVisibleListener * 当用户拉到底时调用 */ /* * setOnTouchListener是监控从点下鼠标 可能拖动鼠标到放开鼠标鼠标可以换成手指的整个过程 他的回调函数是onTouchEventMotionEvent event, * 然后通过判断event.getAction()是MotionEvent.ACTION_UP还是ACTION_DOWN还是ACTION_MOVE分别作不同行为。 * setOnClickListener的监控时间只监控到手指ACTION_DOWN时发生的行为 */ pullToRefresh.setOnRefreshListener(new OnRefreshListener2ListView(){ Override public void onPullDownToRefresh( PullToRefreshBaseListView refreshView) { // TODO Auto-generated method stub PullBean bean new PullBean(); bean.setTitle(下拉刷新); bean.setContent(我的神); adapter.addFirst(bean); new FinishRefresh().execute(); adapter.notifyDataSetChanged(); } Override public void onPullUpToRefresh( PullToRefreshBaseListView refreshView) { // TODO Auto-generated method stub PullBean bean new PullBean(); bean.setTitle(上拉刷新); bean.setContent(我的神); adapter.addLast(bean); new FinishRefresh().execute(); adapter.notifyDataSetChanged(); } }); // pullToRefresh.setOnRefreshListener(new OnRefreshListenerListView() { // // Override // public void onRefresh(PullToRefreshBaseListView refreshView) { // // TODO Auto-generated method stub // String label DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(), // DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL); // // // Update the LastUpdatedLabel // refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); // PullBean bean new PullBean(); // bean.setTitle(我的神); // bean.setContent(我的神); // adapter.addFirst(bean); // new FinishRefresh().execute(); // } // // }); } private void init() { ILoadingLayout startLabels pullToRefresh .getLoadingLayoutProxy(true, false); startLabels.setPullLabel(下拉刷新...);// 刚下拉时显示的提示 startLabels.setRefreshingLabel(正在载入...);// 刷新时 startLabels.setReleaseLabel(放开刷新...);// 下来达到一定距离时显示的提示 ILoadingLayout endLabels pullToRefresh.getLoadingLayoutProxy( false, true); endLabels.setPullLabel(上拉刷新...);// 刚下拉时显示的提示 endLabels.setRefreshingLabel(正在载入...);// 刷新时 endLabels.setReleaseLabel(放开刷新...);// 下来达到一定距离时显示的提示 // // 设置下拉刷新文本 // pullToRefresh.getLoadingLayoutProxy(false, true) // .setPullLabel(上拉刷新...); // pullToRefresh.getLoadingLayoutProxy(false, true).setReleaseLabel( // 放开刷新...); // pullToRefresh.getLoadingLayoutProxy(false, true).setRefreshingLabel( // 正在加载...); // // 设置上拉刷新文本 // pullToRefresh.getLoadingLayoutProxy(true, false) // .setPullLabel(下拉刷新...); // pullToRefresh.getLoadingLayoutProxy(true, false).setReleaseLabel( // 放开刷新...); // pullToRefresh.getLoadingLayoutProxy(true, false).setRefreshingLabel( // 正在加载...); } private ListPullBean getData(){ ListPullBean list new ArrayListPullBean(); for(int i 0;i 10;i ){ PullBean bean new PullBean(); bean.setTitle(item i 搜索业务增速下滑 Google廉颇老矣?); bean.setContent(Google于10月17日发布了2014年第三季度财报); list.add(bean); } return list; } private class FinishRefresh extends AsyncTaskVoid, Void, Void{ Override protected Void doInBackground(Void... params) { try { Thread.sleep(1000); } catch (InterruptedException e) { } return null; } Override protected void onPostExecute(Void result){ // adapter.notifyDataSetChanged(); pullToRefresh.onRefreshComplete(); } } private class MyAdapter extends BaseAdapter{ private LayoutInflater mInflater; public MyAdapter(Context context) { // TODO Auto-generated constructor stub mInflater LayoutInflater.from(context); } public void addFirst(PullBean bean){ data.add(0, bean); } public void addLast(PullBean bean){ data.add(bean); } Override public int getCount() { // TODO Auto-generated method stub return data.size(); } Override public Object getItem(int position) { // TODO Auto-generated method stub return data.get(position); } Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder viewHolder null; if(convertView null){ viewHolder new ViewHolder(); convertView mInflater.inflate(R.layout.item, null); viewHolder.title (TextView) convertView.findViewById(R.id.title); viewHolder.content (TextView) convertView.findViewById(R.id.content); convertView.setTag(viewHolder); }else{ viewHolder (ViewHolder) convertView.getTag(); } viewHolder.title.setText(data.get(position).getTitle()); viewHolder.content.setText(data.get(position).getContent()); return convertView; } class ViewHolder{ TextView title; TextView content; } } } pullToRefresh适配器Adapter和listview也是继承于BaseAdapter 看一下item的布局 ?xml version1.0 encodingutf-8?
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android android:layout_widthmatch_parent android:layout_heightmatch_parent android:padding5dp android:orientationvertical TextView android:idid/title android:layout_widthwrap_content android:layout_heightwrap_content android:textSize18sp android:textColor#BA55D3 android:text我的神/ TextView android:idid/content android:layout_widthwrap_content android:layout_heightwrap_content android:textSize14.0sp android:layout_marginTop5dp android:textColor#7CFC00 android:text我的神/
/LinearLayout pullToRefresh 通过setMode来设置是否可以上拉下拉 Mode.BOTH同时支持上拉下拉 Mode.PULL_FROM_START只支持下拉Pulling Down Mode.PULL_FROM_END只支持上拉Pulling Up 也可以用 ptr:ptrModeboth 可选值为disabled禁用下拉刷新pullFromStart仅支持下拉刷新pullFromEnd仅支持上拉刷新both二者都支持manualOnly只允许手动触发 如果Mode设置成Mode.BOTH需要设置刷新Listener为OnRefreshListener2并实现onPullDownToRefresh()、onPullUpToRefresh()两个方法。 如果Mode设置成Mode.PULL_FROM_START或Mode.PULL_FROM_END需要设置刷新Listener为OnRefreshListener同时实现onRefresh()方法。 当然也可以设置为OnRefreshListener2但是Mode.PULL_FROM_START的时候只调用onPullDownToRefresh()方法Mode.PULL_FROM的时候只调用onPullUpToRefresh()方法. 如果想上拉、下拉刷新的时候 做一样的操作那就用OnRefreshListener上拉下拉的时候都调用 如果想上拉、下拉做不一样的的操作那就在setOnRefreshListener时 用new OnRefreshListener2ListView 当然如果想自己设置上拉下拉中的文字 可以这样 pullToRefresh.getLoadingLayoutProxy(false, true) .setPullLabel(上拉刷新...);
pullToRefresh.getLoadingLayoutProxy(false,true)
.setReleaseLabel( 放开刷新...);
pullToRefresh.getLoadingLayoutProxy(false,true)
.setRefreshingLabel(正在加载...);
// 设置上拉刷新文本
pullToRefresh.getLoadingLayoutProxy(true, false) .setPullLabel(下拉刷新...);
pullToRefresh.getLoadingLayoutProxy(true,false)
.setReleaseLabel(放开刷新...);
pullToRefresh.getLoadingLayoutProxy(true,false)
.setRefreshingLabel( 正在加载...); 显然在实际操作的时候也会用到其他监听 setOnScrollListener() SCROLL_STATE_TOUCH_SCROLL 正在滚动 SCROLL_STATE_FLING 手指做了抛的动作手指离开屏幕前用力滑了一下 SCROLL_STATE_IDLE 停止滚动 setOnLastItemVisibleListener 当用户拉到底时调用 setOnItemClickListener() 为pullToRefresh中每一个item设置事件 代码下载点击下载代码 下拉上拉 图标和文字 位置改动是在PullToRefresh源代码中改的即PullToRefreshListView.handleStyledAttributes 中lp的Gravity改为CENTER_VERTICAL 如果想要改动图标和文字的距离和布局 在这library项目下这两个文件改 pull_to_refresh_header_horizontal.xml pull_to_refresh_header_vertical.xml 转载于:https://www.cnblogs.com/a446276468/p/5387151.html