kunyashaw博客主页 关注kunyashaw新博客 关于kunyashaw 转到底部

44、gridview实现下拉刷新、上拉加载更多(最简单实现上下拉操作的开源工程!)

1、工程加入以下两个文件夹:(参考:https://github.com/jingchenUSTC/PullToRefreshAndLoad) (待会我会将demo打包上传)

 

2、这个demo只有一个activity,该activity就是显示一个支持上拉加载更多的gridview:

 1 package com.example.test_textview;
 2 
 3 
 4 
 5 import java.util.ArrayList;
 6 import java.util.List;
 7 
 8 import com.jingchen.pulltorefresh.MyListener;
 9 import com.jingchen.pulltorefresh.PullToRefreshLayout;
10 
11 import android.app.Activity;
12 import android.content.Context;
13 import android.os.Bundle;
14 import android.os.Handler;
15 import android.widget.GridView;
16 import android.widget.ListView;
17 
18 public class MainActivity extends Activity {
19 
20 
21     public String tag = "MainActivity";
22     
23     public static Context ctxt = null;
24     public static Handler handler = null;
25     
26     public GridView gridview = null;
27     public girdviewAdapter adapter = null;
28     public List<Integer> listGridview = null;
29     
30     public static int index = 0;
31     
32     public static final int UPDATE_GRIDVIEW_LOAD_MORE = 0;
33     
34     @Override
35     protected void onCreate(Bundle savedInstanceState) {
36         super.onCreate(savedInstanceState);
37         
38         setContentView(R.layout.activity_main);
39         
40         init();
41         
42         widgetConfigure();
43 
44     }
45     
46     
47     public void init()
48     {
49         ctxt = getApplicationContext();
50         
51         gridview = (GridView)findViewById(R.id.gridview_test);
52         
53         handler = new Handler()
54         {
55             public void handleMessage(android.os.Message msg) 
56             {
57                 switch(msg.what)
58                 {
59                 case UPDATE_GRIDVIEW_LOAD_MORE:
60                     
61                     index++;
62                     for(int k=0;k<12;k++)
63                     {
64                         int t = 12*index+k;
65                         listGridview.add(t);
}
68 69
               adapter.notifyDataSetChanged();
              gridview.smoothScrollToPosition(adapter.getCount());
70                     
71                     break;
72                 }
73             };
74         };
75         
76         listGridview = new ArrayList<Integer>();
77         for(int k=0;k<12;k++)
78         {
79             listGridview.add(k);
80         }
81         adapter = new girdviewAdapter(listGridview,ctxt,handler);
82         
83         
84     }
85     
86     public void widgetConfigure()
87     {
88         gridview.setAdapter(adapter);
89 
90         ((PullToRefreshLayout) findViewById(R.id.refresh_view)).setOnRefreshListener(new MyListener());
91         
92     }
93 }

 

3、activity_main xml文件:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:layout_width="match_parent"
 3     android:layout_height="match_parent"
 4     android:background="@color/Constrast_3"
 5     android:orientation="vertical"
 6     android:padding="20dp" >
 7 
 8         <com.jingchen.pulltorefresh.PullToRefreshLayout
 9                     android:id="@+id/refresh_view"  <!-- 这个自定义布局,可以通过检测手势,判断是上拉还是下拉,然后将结果告诉listener-->
10                     android:layout_width="match_parent"
11                     android:layout_height="match_parent"
12                     android:layout_alignParentTop="true"
13                     >
14                 
15                     <include layout="@layout/refresh_head" />   <!-- 这个是下拉刷新的头,引用的1中git的文件-->
16                 
17                     <com.jingchen.pulltorefresh.pullableview.PullableGridView
18                             android:id="@+id/gridview_test"
19                             android:layout_width="match_parent"
20                             android:layout_height="wrap_content"
21                             android:numColumns="4"
22                             android:verticalSpacing="12dp"
23                             android:horizontalSpacing="14dp"
24                             android:gravity="center"
25                         />
26                 
27                     <include layout="@layout/load_more" />    <!-- 这个是上拉加载更多的尾部,引用的1中git的文件-->
28 29 </com.jingchen.pulltorefresh.PullToRefreshLayout> 30 31 </LinearLayout>

 

 

3、refreshView通过检测手势,判断用户操作是上拉还是下拉,进而通过listener来进行相应的数据操作:

 1 package com.jingchen.pulltorefresh;
 2 
 3 import android.os.Handler;
 4 import android.os.Message;
 5 
 6 import com.example.test_textview.MainActivity;
 7 import com.jingchen.pulltorefresh.PullToRefreshLayout.OnRefreshListener;
 8 
 9 public class MyListener implements OnRefreshListener
10 {
11 
12     @Override
13     public void onRefresh(final PullToRefreshLayout pullToRefreshLayout)
14     {
15         
16         pullToRefreshLayout.refreshFinish(PullToRefreshLayout.SUCCEED);
17         
18     /*    // 下拉刷新操作
19         new Handler()
20         {
21             @Override
22             public void handleMessage(Message msg)
23             {
24                 // 千万别忘了告诉控件刷新完毕了哦!
25                 pullToRefreshLayout.refreshFinish(PullToRefreshLayout.SUCCEED);
26             }
27         }.sendEmptyMessageDelayed(0, 5000);*/
28     }
29 
30     @Override
31     public void onLoadMore(final PullToRefreshLayout pullToRefreshLayout)
32     {
33     
34         
35         // 加载操作
36         new Handler()
37         {
38             @Override
39             public void handleMessage(Message ms1g)
40             {
41                 // 千万别忘了告诉控件加载完毕了哦!
42                 pullToRefreshLayout.loadmoreFinish(PullToRefreshLayout.SUCCEED);
43                 
44                 Message msg = new Message();
45                 msg.what = MainActivity.UPDATE_GRIDVIEW_LOAD_MORE;
46                 MainActivity.handler.sendMessage(msg);
47             }
48         }.sendEmptyMessageDelayed(0, 5000);
49         
50     }
51 
52 }

 

 

需要看demo整个工程的请跳转:http://pan.baidu.com/s/1hqjci6w

 

posted @ 2015-07-10 09:30  kunyashaw  阅读(3365)  评论(1编辑  收藏  举报
回到顶部