首页 > 代码库 > Android 下拉刷新上拉加载效果功能,使用开源项目android-pulltorefresh实现
Android 下拉刷新上拉加载效果功能,使用开源项目android-pulltorefresh实现
应用场景:
在App开发中,对于信息的获取与演示,不可能全部将其获取与演示,为了在用户使用中,给予用户以友好、方便的用户体验,以滑动、下拉的效果动态加载数据的要求就会出现。为此,该效果功能就需要应用到所需要的展示页面中。
知识点介绍:
本文主要根据开源项目android-pulltorefresh展开介绍。android-pulltorefresh
【一个强大的拉动刷新开源项目,支持各种控件下拉刷新 ListView、ViewPager、WevView、ExpandableListView、GridView、(Horizontal )ScrollView、Fragment上下左右拉动刷新,比下面johannilsson那个只支持ListView的强大的多。并且他实现的下拉刷新ListView在item不足一屏情况下也不会显示刷新提示,体验更好。】
第一步:新建Android工程SampleDemo
第二步:在res/values下新建attrs.xml
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <!--?xml version= 1.0 encoding=utf- 8 ?--> <resources> <declare-styleable name= "PullToRefresh" > <flag name= "pullDownFromTop" value=http://www.mamicode.com/ "0x1" > <flag name= "pullUpFromBottom" value=http://www.mamicode.com/ "0x2" > <flag name= "both" value=http://www.mamicode.com/ "0x3" > </flag></flag></flag></attr> </declare-styleable> </resources> srings.xml <!--?xml version= 1.0 encoding=utf- 8 ?--> <resources> <string name= "app_name" >SampleDemo</string> <string name= "action_settings" >Settings</string> <string name= "pull_to_refresh_pull_down_label" >滑动刷新</string> <string name= "pull_to_refresh_release_label" >释放刷新</string> <string name= "pull_to_refresh_refreshing_label" >加载中</string> <string name= "pull_to_refresh_tap_label" >点击刷新</string> </resources> |
第四步:
1、导入或将开源项目android-pulltorefresh中需要的类文件(.java),加入到自己的项目中的指定包内。
该演示用例涉及的类文件为:
【library src com.handmark.pulltorefresh.library】
PullToRefreshAdapterViewBase.java
PullToRefreshBase.java
PullToRefreshListView.java
【library src com.handmark.pull.torefresh.library.internal】
EmptyViewMethodAccessor.java
LoadingLayout.java
2、构建自己所需要的类文件(.java)。
【PullTask.java】
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import java.util.LinkedList; import com.example.sampledemo.view.PullToRefreshListView; import android.os.AsyncTask; import android.widget.BaseAdapter; public class PullTask extends AsyncTask< void , string= "" >{ private PullToRefreshListView pullToRefreshListView; //实现下拉刷新与上拉加载的ListView private int pullState; //记录判断,上拉与下拉动作 private BaseAdapter baseAdapter; //ListView适配器,用于提醒ListView数据已经更新 private LinkedList<string> linkedList; public PullTask(PullToRefreshListView pullToRefreshListView, int pullState, BaseAdapter baseAdapter, LinkedList<string> linkedList) { this .pullToRefreshListView = pullToRefreshListView; this .pullState = pullState; this .baseAdapter = baseAdapter; this .linkedList = linkedList; } @Override protected String doInBackground(Void... params) { try { Thread.sleep( 1000 ); } catch (InterruptedException e) { } return StringTest; } @Override protected void onPostExecute(String result) { if (pullState == 1 ) { //name=pullDownFromTop value=http://www.mamicode.com/0x1 下拉 linkedList.addFirst(顶部数据); } if (pullState == 2 ) { //name=pullUpFromBottom value=http://www.mamicode.com/0x2 上拉 linkedList.addLast(底部数据); } baseAdapter.notifyDataSetChanged(); pullToRefreshListView.onRefreshComplete(); super .onPostExecute(result); } }</string></string></ void ,> |
【PullAdapter.java】
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import java.util.LinkedList; import com.example.sampledemo.R; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class PullAdapter extends BaseAdapter { private LinkedList<string> linkedList; private LayoutInflater mInflater; public PullAdapter(LinkedList<string> linkedList, Context context) { mInflater = LayoutInflater.from(context); this .linkedList = linkedList; } @Override public int getCount() { return linkedList.size(); } @Override public Object getItem( int position) { return linkedList.get(position); } @Override public long getItemId( int position) { return position; } @Override public View getView( int position, View convertView, ViewGroup parent) { ViewHolder holder= null ; if (convertView == null ) { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.layout_main_listitem, null ); holder.textView = (TextView) convertView.findViewById(R.id.textView); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } if (linkedList.size()> 0 ){ final String dataStr = linkedList.get(position); holder.textView.setText(dataStr); } return convertView; } private static class ViewHolder { TextView textView; //数据显示区域 } }</string></string> |
第四步:为PullAdapter.java 设计布局文件layout_main_listitem.xml
?
1 2 3 4 | <!--?xml version= 1.0 encoding=utf- 8 ?--> <linearlayout android:background= "#FFFFFF" android:layout_height= "match_parent" android:layout_width= "match_parent" android:orientation= "vertical" xmlns:android= "http://schemas.android.com/apk/res/android" > <textview android:gravity= "left" android:id= "@+id/textView" android:layout_height= "wrap_content" android:layout_margintop= "4dp" android:layout_width= "match_parent" android:textcolor= "#99CC66" android:textsize= "18dp" > </textview></linearlayout> |
滑动时出现提醒布局文件pull_to_refresh_header.xml
?
1 2 3 4 5 6 | <!--?xml version= 1.0 encoding=utf- 8 ?--> <relativelayout android:layout_height= "fill_parent" android:layout_width= "fill_parent" android:paddingbottom= "10dip" android:paddingtop= "10dp" xmlns:android= "http://schemas.android.com/apk/res/android" > <textview android:id= "@+id/pull_to_refresh_text" android:layout_centerinparent= "true" android:layout_height= "wrap_content" android:layout_width= "wrap_content" android:text= "@string/pull_to_refresh_pull_down_label" android:textappearance= "?android:attr/textAppearanceMedium" android:textstyle= "bold" > <progressbar android:id= "@+id/pull_to_refresh_progress" android:indeterminate= "true" android:layout_centervertical= "true" android:layout_height= "wrap_content" android:layout_marginleft= "30dip" android:layout_marginright= "20dip" android:layout_width= "wrap_content" android:visibility= "gone" style= "?android:attr/progressBarStyleSmall" > <imageview android:id= "@+id/pull_to_refresh_image" android:layout_centervertical= "true" android:layout_height= "wrap_content" android:layout_marginleft= "30dip" android:layout_marginright= "20dip" android:layout_width= "wrap_content" > </imageview></progressbar></textview></relativelayout> |
MainActivity.java 主布局文件activity_main.xml
?
1 2 3 4 | <relativelayout android:background= "#FFFFFF" android:layout_height= "match_parent" android:layout_width= "match_parent" xmlns:android= "http://schemas.android.com/apk/res/android" xmlns:cp= "http://schemas.android.com/apk/res/com.example.sampledemo" xmlns:tools= "http://schemas.android.com/tools" > <com.example.sampledemo.view.pulltorefreshlistview android:background= "#FFFFFF" android:cachecolorhint= "#00000000" android:divider= "@android:color/black" android:dividerheight= "0.1dip" android:id= "@+id/pullrefresh" android:layout_height= "fill_parent" android:layout_width= "fill_parent" cp:mode= "both" > </com.example.sampledemo.view.pulltorefreshlistview> </relativelayout> |
第五步:编写MainActivity.java
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | import java.util.Arrays; import java.util.LinkedList; import com.example.sampledemo.view.PullToRefreshBase.OnRefreshListener; import com.example.sampledemo.view.PullToRefreshListView; import com.example.sampledemo.view.adapter.PullAdapter; import com.example.sampledemo.view.task.PullTask; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; import android.app.Activity; /** * @ClassName MainActivity.java * @Author MaHaochen * @Date 2014-4-30 15:56:47 */ public class MainActivity extends Activity { private LinkedList<string> mListItems; private PullToRefreshListView mPullRefreshListView; private ArrayAdapter<string> mAdapter; private ListView mListView; private PullAdapter pullAdapter; private String[] mStrings = { 初始数据 01 ,初始数据 02 ,初始数据 03 ,初始数据 04 ,初始数据 05 }; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); } private void initViews() { mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.pullrefresh); mPullRefreshListView.setOnRefreshListener(mOnrefreshListener); mListView = mPullRefreshListView.getRefreshableView(); mListItems = new LinkedList<string>(); mListItems.addAll(Arrays.asList(mStrings)); pullAdapter = new PullAdapter(mListItems, MainActivity. this ); mListView.setAdapter(pullAdapter); } OnRefreshListener mOnrefreshListener = new OnRefreshListener() { public void onRefresh() { PullTask pullTask = new PullTask(mPullRefreshListView, mPullRefreshListView.getRefreshType(), pullAdapter, mListItems); pullTask.execute(); } }; }</string></string></string> |
下载地址:http://download.csdn.net/detail/fngy123/7611567
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。