android自定义分页组件

来源:互联网 发布:python简明教程中文 编辑:程序博客网 时间:2024/06/06 02:38
组件代码如下:
public class PageControl extends LinearLayout implements OnClickListener{private ImageButton firstImg;private ImageButton preImg;private ImageButton nextImg;private ImageButton endImg;private TextView totalPageText;private TextView curPageText;private int numPerPage=10;private int curPage=1;private int count=0;private OnPageChangeListener pageChangeListener; public PageControl(Context context) {super(context);initPageComposite(context);}public PageControl(Context context, AttributeSet attrs) {super(context, attrs);initPageComposite(context);}public PageControl(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);initPageComposite(context);}private void initPageComposite(Context context){this.setPadding(5,5,5,5);firstImg=new ImageButton(context);firstImg.setId(1);firstImg.setImageResource(R.drawable.firstpage);firstImg.setPadding(0,0,0,0);LayoutParams layoutParam=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);layoutParam.setMargins(0,0,5,0);firstImg.setLayoutParams(layoutParam);firstImg.setOnClickListener(this);this.addView(firstImg);preImg=new ImageButton(context);preImg.setId(2);preImg.setImageResource(R.drawable.prepage);preImg.setPadding(0,0,0,0);layoutParam=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);layoutParam.setMargins(0,0,5,0);preImg.setLayoutParams(layoutParam);preImg.setOnClickListener(this);this.addView(preImg);nextImg=new ImageButton(context);nextImg.setId(3);nextImg.setImageResource(R.drawable.nextpage);nextImg.setPadding(0,0,0,0);layoutParam=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);layoutParam.setMargins(0,0,5,0);nextImg.setLayoutParams(layoutParam);nextImg.setOnClickListener(this);this.addView(nextImg);endImg=new ImageButton(context);endImg.setId(4);endImg.setImageResource(R.drawable.lastpage);endImg.setPadding(0,0,0,0);layoutParam=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);layoutParam.setMargins(0,0,5,0);endImg.setLayoutParams(layoutParam);endImg.setOnClickListener(this);this.addView(endImg);totalPageText=new TextView(context);layoutParam=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.MATCH_PARENT);layoutParam.setMargins(5,0,5,0);totalPageText.setLayoutParams(layoutParam);totalPageText.setText("总页数");this.addView(totalPageText);curPageText=new TextView(context);layoutParam=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.MATCH_PARENT);layoutParam.setMargins(5,0,5,0);curPageText.setLayoutParams(layoutParam);curPageText.setText("当前页");this.addView(curPageText);}/** * 初始化分页组件的显示状态 * @param newCount */public void initPageShow(int newCount){count=newCount;int totalPage=count%numPerPage==0?count/numPerPage:count/numPerPage+1;curPage=1;firstImg.setEnabled(false);preImg.setEnabled(false);if(totalPage<=1){endImg.setEnabled(false);nextImg.setEnabled(false);}else{endImg.setEnabled(true);nextImg.setEnabled(true);}totalPageText.setText("总页数 "+totalPage);curPageText.setText("当前页 "+curPage);}/** * 分页按钮被点击时更新状态,该方法要在initPageShow后调用 */@Overridepublic void onClick(View view) {if(pageChangeListener==null){return;}int totalPage=count%numPerPage==0?count/numPerPage:count/numPerPage+1;switch(view.getId()){case 1:curPage=1;firstImg.setEnabled(false);preImg.setEnabled(false);if(totalPage>1){nextImg.setEnabled(true);endImg.setEnabled(true);}break;case 2:curPage--;if(curPage==1){firstImg.setEnabled(false);preImg.setEnabled(false);}if(totalPage>1){nextImg.setEnabled(true);endImg.setEnabled(true);}break;case 3:curPage++;if(curPage==totalPage){nextImg.setEnabled(false);endImg.setEnabled(false);}firstImg.setEnabled(true);preImg.setEnabled(true);break;case 4:curPage=totalPage;nextImg.setEnabled(false);endImg.setEnabled(false);firstImg.setEnabled(true);preImg.setEnabled(true);break;default:break;}totalPageText.setText("总页数 "+totalPage);curPageText.setText("当前页 "+curPage);pageChangeListener.pageChanged(curPage,numPerPage);}public OnPageChangeListener getPageChangeListener() {return pageChangeListener;}/** * 设置分页监听事件 * @param pageChangeListener */public void setPageChangeListener(OnPageChangeListener pageChangeListener) {this.pageChangeListener = pageChangeListener;}}
分页监听器代码:
/** * 分页监听事件 */public interface OnPageChangeListener {/** * 点击分页按钮时触发此操作 * @param curPage 当前页 * @param numPerPage 每页显示个数 */public void pageChanged(int curPage,int numPerPage);}
使用示例:实现ListView分页效果
Activity布局如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <ListView        android:id="@+id/wordList"        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="11" >    </ListView>    <org.chen.wordreview.control.PageControl       android:id="@+id/wordListPageControl"       android:layout_width="match_parent"       android:layout_height="0dp"       android:layout_weight="1"/></LinearLayout>
Activity实现:
//实现分页监听接口public class MainActivity extends Activity implements OnPageChangeListener{private WordDao wordDao;private ListView wordListView;private ArrayAdapter<Word> adapter;private PageControl pageControl;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_wordlist);        ...        //初始化分页组件        pageControl=(PageControl) findViewById(R.id.wordListPageControl);        pageControl.setPageChangeListener(this);        pageControl.initPageShow(wordDao.getCount());        ...    }    /**     * 点击分页按钮时触发该方法的执行     * @param curPage 当前页     * @param numPerPage 每页显示记录数     */@Overridepublic void pageChanged(int curPage, int numPerPage) {List<Word> words=wordDao.findOnePage((curPage-1)*numPerPage,numPerPage);adapter.clear();adapter.addAll(words);adapter.notifyDataSetChanged();}}
分页效果图


原创粉丝点击