Android custom paging component

Source: Internet
Author: User

The component code is as follows:
[Java]
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 );
FirstImg = new ImageButton (context );
FirstImg. setId (1 );
FirstImg. setImageResource (R. drawable. firstpage );
FirstImg. setPadding (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 );
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 );
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 );
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 ("total page number ");
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 ("Current page ");
This. addView (curPageText );
}
/**
* Initialize the display status of the paging component.
* @ 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 ("Total pages" + totalPage );
CurPageText. setText ("Current page" + curPage );
}
/**
* The status is updated when the pagination button is clicked. This method must be called after initPageShow.
*/
@ Override
Public 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 ("Total pages" + totalPage );
CurPageText. setText ("Current page" + curPage );
PageChangeListener. pageChanged (curPage, numPerPage );
}
Public OnPageChangeListener getPageChangeListener (){
Return pageChangeListener;
}
/**
* Set a paging listener event
* @ Param pageChangeListener
*/
Public void setPageChangeListener (OnPageChangeListener pageChangeListener ){
This. pageChangeListener = pageChangeListener;
}
}
Page listener code:
[Java]
/**
* Paging listening events
*/
Public interface OnPageChangeListener {
/**
* This operation is triggered when the paging button is clicked.
* @ Param curPage current page
* @ Param numPerPage: number of entries displayed on each page
*/
Public void pageChanged (int curPage, int numPerPage );
}
Example: implement the paging Effect of ListView
The Activity layout is as follows:
[Html]
<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 implementation:
[Java]
// Implement the paging listener Interface
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 );
...
// Initialize the paging component
PageControl = (PageControl) findViewById (R. id. wordListPageControl );
PageControl. setPageChangeListener (this );
PageControl. initPageShow (wordDao. getCount ());
...
}
/**
* This method is triggered when the paging button is clicked.
* @ Param curPage current page
* @ Param numPerPage: number of records displayed on each page
*/
@ Override
Public void pageChanged (int curPage, int numPerPage ){
List <Word> words = wordDao. findOnePage (curPage-1) * numPerPage, numPerPage );
Adapter. clear ();
Adapter. addAll (words );
Adapter. notifyDataSetChanged ();
}
}
Paging

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.