一个强大的拉动刷新开源项目,支持各种控件下拉刷新

【一个强大的拉动刷新开源项目,支持各种控件下拉刷新 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= "0x1" >
             <flag name= "pullUpFromBottom" value= "0x2" >
             <flag name= "both" value= "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),加入到自己的项目中的指定包内。
该演示用例涉及的类文件为:
【librarysrccomhandmarkpulltorefreshlibrary】
PullToRefreshAdapterViewBase.java
PullToRefreshBase.java
PullToRefreshListView.java
【librarysrccomhandmarkpulltorefreshlibraryinternal】
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=0x1 下拉
             linkedList.addFirst(顶部数据);
         }
         if (pullState == 2 ) { //name=pullUpFromBottom value=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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值