安卓自定义分页view
来源:互联网 发布:淘宝达人 开店 编辑:程序博客网 时间:2024/05/20 19:47
模仿web上的分页按钮,类似下图中按钮,当前图为只有一页
具体代码如下:
public class PageControl extends LinearLayout implements View.OnClickListener { private int maxPage = 1;//最大页 private int curPage = 1;//当前页 private int TotalCount = 0;//总数 private int buttonCount = 5;//按钮数 private int lastButton = 0;//最后一个按钮对应的页码 private int firstButton = 0;//第一个按钮对应的页码 private OnPageChangeListener pageChangeListener; Context context; private int height = 0; //分页监听事件 public interface OnPageChangeListener { //点击分页按钮时触发此操作 // curPage 当前页 numPerPage 每页显示个数 void pageChanged(int numPerPage); } public PageControl(Context context) { this(context, null); } public PageControl(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public PageControl(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context = context; height = DisplayUtil.getInstance().dip2px(context, 44); initPageComposite(); } private void createView(int page) { TextView first = createView(); first.setText(page + ""); first.setTag(page); first.setOnClickListener(this); this.addView(first); } private TextView createView() { TextView first = new TextView(context); first.setBackgroundResource(R.drawable.page_sel); first.setPadding(20, 0, 20, 0); first.setGravity(Gravity.CENTER); LayoutParams layoutParam = new LayoutParams(LayoutParams.WRAP_CONTENT, height); first.setMinWidth(height); //first.setTextColor(context.getResources().getColor(R.drawable.selector_textcolor,null)); layoutParam.setMargins(0, 0, 15, 0); first.setLayoutParams(layoutParam); return first; } private void createPrevious() { TextView first = createView(); first.setText("上一页"); first.setOnClickListener(this); this.addView(first, 0); } private void createNext() { TextView first = createView(); first.setText("下一页"); first.setOnClickListener(this); this.addView(first); } public void initPageComposite() { int temp = maxPage; maxPage = TotalCount % Constant.PageSize == 0 ? TotalCount / Constant.PageSize : TotalCount / Constant.PageSize + 1; if (temp != maxPage) { createAllView(); } if (maxPage == 0) { removeAllViews(); return; } if (curPage < firstButton || curPage > lastButton || lastButton == 0) { createAllView(); } setSelectView(curPage); } private void setBtnGroup() { int n = maxPage / buttonCount; if (n == 0) { //只有一组 firstButton = 1; lastButton = maxPage; } else { int i = curPage / buttonCount; //有n组 firstButton = i * buttonCount + 1; if (firstButton > curPage) { firstButton = (i - 1) * buttonCount + 1; } lastButton = (firstButton - 1) + buttonCount; } if (lastButton > maxPage && lastButton > 1) { lastButton = maxPage; } } private void createAllView() { setBtnGroup(); this.removeAllViews(); this.setPadding(10, 10, 10, 10); int n = firstButton; while (n <= lastButton && n <= TotalCount) { createView(n); n++; } createPrevious(); createNext(); } public void setTotalCount(int totalCount) { if (totalCount != TotalCount) { TotalCount = totalCount; initPageComposite(); } } public int getTotalCount() { return TotalCount; } //分页按钮被点击时更新状态,该方法要在initPageShow后调用 @Override public void onClick(View view) { if (pageChangeListener == null) return; if (view instanceof TextView) { TextView tv = (TextView) view; String txt = tv.getText().toString(); if (txt.equalsIgnoreCase("上一页")) { curPage -= 1; curPage = curPage >= 1 ? curPage : 1; setSelectView(curPage); pageChangeListener.pageChanged(curPage); initPageComposite(); return; } if (txt.equalsIgnoreCase("下一页")) { curPage += 1; curPage = curPage <= maxPage ? curPage : maxPage; setSelectView(curPage); pageChangeListener.pageChanged(curPage); initPageComposite(); return; } } if (view.getTag() != null) { Object tag = view.getTag(); curPage = Integer.parseInt(tag.toString()); pageChangeListener.pageChanged(curPage); setSelectView(curPage); } } public void setCurrentPage(int page) { curPage = page; setSelectView(curPage); } private void setSelectView(int n) { //initPageComposite(); for (int i = 0; i < this.getChildCount(); i++) { View v = this.getChildAt(i); if (v.getTag() != null) { int tag = Integer.parseInt(v.getTag().toString()); if (tag == n) { v.setSelected(true); } else { v.setSelected(false); } } } } /** * 设置分页监听事件 */ public void setPageChangeListener(OnPageChangeListener pageChangeListener) { this.pageChangeListener = pageChangeListener; }}
使用
PageControl pager = (PageControl) view.findViewById(R.id.parentPanel);
pager.setPageChangeListener(this);
pager.setPageChangeListener(new PageControl.OnPageChangeListener() { @Override public void pageChanged(int numPerPage) {//请求数据 }});
//根据实际返回的数据记录数设置总数
pager.setTotalCount(bean.Count);
阅读全文
0 0
- 安卓自定义分页view
- 安卓自定义View
- 安卓自定义view
- 安卓自定义View
- 安卓自定义View
- 安卓自定义view
- 安卓自定义View组件
- 安卓常用自定义View
- 安卓开发自定义View
- 安卓自定义View详解
- 安卓自定义View教程
- 安卓自定义View网址
- 安卓自定义View进阶
- 安卓自定义View进阶
- 安卓开发28:自定义View类
- 安卓自定义View(第一篇)
- 安卓自定义view学习_1
- 安卓自定义view学习_2
- C语言实现判断大端小端存储方式的代码
- java中的BigDecimal和String的相互转换
- 马云:阿里必须是一家创造未来的公司,必须成为国家和世界创新的发动机
- David Silver强化学习课程笔记(二)
- POJ 2774 Long Long Message
- 安卓自定义分页view
- idea springboot 热部署
- oracle表结构设计
- SphereCast和SphereCastAll
- ADC检测多个按键
- c++入门基础知识
- Oracle 11g EM删除重建的方法
- JAVA 面向对象六大原则
- Hadoop 新特性、改进、优化和Bug分析系列5:YARN-3