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