1、封装的GridView:
public class PageGridView extends LinearLayout {
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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
private GridView gridview;
private LinearLayout footerView;
public static final String TAG = "ListViewWithPage";
public PageGridView(Context context) {
super(context);
init();
}
public PageGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public PageGridView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init(){
gridview = new GridView(getContext());
setOrientation(LinearLayout.VERTICAL);
addView(gridview);
gridview.getLayoutParams().width = LinearLayout.LayoutParams.FILL_PARENT;
gridview.getLayoutParams().height = LinearLayout.LayoutParams.WRAP_CONTENT;
//设置footer,可以在里面加进度条等内容
footerView = new LinearLayout(getContext());
ProgressBar pb = new ProgressBar(getContext());
TextView tvMessage = new TextView(getContext());
tvMessage.setText("正在加载数据。。。");
tvMessage.setTextSize(20);
footerView.addView(pb);
footerView.addView(tvMessage);
footerView.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.TOP);
addView(footerView);
footerView.getLayoutParams().width = LinearLayout.LayoutParams.FILL_PARENT;
footerView.getLayoutParams().height = 100;
footerView.setVisibility(View.GONE);
}
//由于调用此方法一般都为单开线程,不能直接更新控件状态,因此需要一个Handler来协助
public void updateFooter(int statue){
updateFooterViewHandler.sendEmptyMessage(statue);
}
private Handler updateFooterViewHandler = new Handler(){
@Override
public void handleMessage(android.os.Message msg) {
//这里状态 可以控制为多个,如果想要下拉箭头的话,可以根据状态来修改控件内容,这里我只设置是否显示而已
footerView.setVisibility(msg.what);
//当设置View.GONE的时候,数据已经加载完成,因此需要通知数据改变
if(msg.what==View.GONE){
((BaseAdapter)gridview.getAdapter()).notifyDataSetChanged();
}
};
};
public void setOnScrollListener(OnScrollListener onScrollListener){
gridview.setOnScrollListener(onScrollListener);
}
public void setNumColumns(int number){
gridview.setNumColumns(number);
}
public void setVerticalSpacing(int spacing){
gridview.setVerticalSpacing(spacing);
}
public void setHorizontalSpacing(int spacing){
gridview.setHorizontalSpacing(spacing);
}
public void setColumnWidth(int width){
gridview.setColumnWidth(width);
}
public void setStretchMode(int stretchMode){
gridview.setStretchMode(stretchMode);
}
public void setAdapter(BaseAdapter adapter){
gridview.setAdapter(adapter);
}
public void setOnItemClickListener(OnItemClickListener itemClickListener){
gridview.setOnItemClickListener(itemClickListener);
}
|
}
2、调用:
public class MainActivity extends Activity {
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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
private List<String> datas = new ArrayList<String>();
private PageGridView gridview;
private BaseAdapter adapter = new BaseAdapter() {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LinearLayout llParent = new LinearLayout(MainActivity.this);
TextView tv = new TextView(MainActivity.this);
llParent.addView(tv);
tv.setText("第"+position+"个");
tv.getLayoutParams().width=200;
tv.getLayoutParams().height = 30;
tv.setGravity(Gravity.CENTER);
llParent.setBackgroundColor(Color.GRAY);
int padding = 10;
llParent.setPadding(padding, padding, padding, padding);
return llParent;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return datas.size();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加20个
for(int i=0;i<20;i++){
datas.add(i+"");
}
LinearLayout llParent = new LinearLayout(this);
llParent.setOrientation(LinearLayout.VERTICAL);
llParent.setGravity(Gravity.TOP);
gridview = new PageGridView(this);
llParent.addView(gridview);
gridview.setNumColumns(GridView.AUTO_FIT);
gridview.setVerticalSpacing(10);
gridview.setHorizontalSpacing(15);
//这里注意,一定要设置Gravity为Gravity.CENTER,否则不会出现页脚
gridview.setGravity(Gravity.CENTER);
gridview.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
// 滚动到底,请求下一页数据
if (view.getLastVisiblePosition() == (view.getCount() - 1)) {
requestNextPage();
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if(view.getLastVisiblePosition() != (view.getCount() - 1)){
gridview.updateFooter(View.GONE);
}
}
});
// 添加并且显示
gridview.setAdapter(adapter);
setContentView(llParent);
}
private void requestNextPage(){
gridview.updateFooter(View.VISIBLE);
new Thread(){
@Override
public void run() {
try {
int length = datas.size();
for(int i=length;i<length+20;i++){
datas.add(i+"");
}
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
gridview.updateFooter(View.GONE);
};
}.start();
}
|