How to Implement Pagination in Android Listview

How to add pagination in listview?

replace setOnScrollListener with this

listView.setOnScrollListener(new OnScrollListener(){

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {}

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {

int lastInScreen = firstVisibleItem + visibleItemCount;
if((lastInScreen == totalItemCount) && !(loadingMore)){
getData();
}
}
});

How to implement pagination in Android listview

Implementing pagination is very simple.

Take look at this...

public class MainActivity extends Activity {  

private ListView listview;
private TextView title;

private ArrayList<String> data;
ArrayAdapter<String> sd;

public int TOTAL_LIST_ITEMS = 1030;
public int NUM_ITEMS_PAGE = 100;
private int noOfBtns;
private Button[] btns;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

listview = (ListView)findViewById(R.id.list);
title = (TextView)findViewById(R.id.title);

Btnfooter();

data = new ArrayList<String>();

/*
* The ArrayList data contains all the list items
*/
for(int i=0;i<TOTAL_LIST_ITEMS;i++)
{
data.add("This is Item "+(i+1));
}

loadList(0);

CheckBtnBackGroud(0);

}

private void Btnfooter()
{
int val = TOTAL_LIST_ITEMS%NUM_ITEMS_PAGE;
val = val==0?0:1;
noOfBtns=TOTAL_LIST_ITEMS/NUM_ITEMS_PAGE+val;

LinearLayout ll = (LinearLayout)findViewById(R.id.btnLay);

btns = new Button[noOfBtns];

for(int i=0;i<noOfBtns;i++)
{
btns[i] = new Button(this);
btns[i].setBackgroundColor(getResources().getColor(android.R.color.transparent));
btns[i].setText(""+(i+1));

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
ll.addView(btns[i], lp);

final int j = i;
btns[j].setOnClickListener(new OnClickListener() {

public void onClick(View v)
{
loadList(j);
CheckBtnBackGroud(j);
}
});
}

}

/**
* Method for Checking Button Backgrounds
*/
private void CheckBtnBackGroud(int index)
{
title.setText("Page "+(index+1)+" of "+noOfBtns);
for(int i=0;i<noOfBtns;i++)
{
if(i==index)
{
btns[index].setBackgroundDrawable(getResources().getDrawable(R.drawable.box_green));
btns[i].setTextColor(getResources().getColor(android.R.color.white));
}
else
{
btns[i].setBackgroundColor(getResources().getColor(android.R.color.transparent));
btns[i].setTextColor(getResources().getColor(android.R.color.black));
}
}

}

/**
* Method for loading data in listview
* @param number
*/
private void loadList(int number)
{
ArrayList<String> sort = new ArrayList<String>();

int start = number * NUM_ITEMS_PAGE;
for(int i=start;i<(start)+NUM_ITEMS_PAGE;i++)
{
if(i<data.size())
{
sort.add(data.get(i));
}
else
{
break;
}
}
sd = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
sort);
listview.setAdapter(sd);
}
}

Xml file:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:gravity="center"
android:textSize="16sp"
android:background="@android:color/darker_gray"
android:padding="10dp"/>

<ListView
android:id="@+id/list"
android:divider="#000"
android:dividerHeight="1dp"
android:cacheColorHint="#00000000"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:fadingEdge="none"/>

<HorizontalScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/btnLay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>

For more clear explanation and source code visit this links

ListView Pagination Ex-1

ListView Pagination Ex-2

How to implement Paginated List View in Android

EDIT: This one is better: http://p-xr.com/android-tutorial-dynamicaly-load-more-items-to-the-listview-never-ending-list/

-----------------------------------*----------------------

http://benjii.me/2010/08/endless-scrolling-listview-in-android/

public class EndlessScrollListener implements OnScrollListener {

private int visibleThreshold = 5;
private int currentPage = 0;
private int previousTotal = 0;
private boolean loading = true;

public EndlessScrollListener() {
}
public EndlessScrollListener(int visibleThreshold) {
this.visibleThreshold = visibleThreshold;
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (loading) {
if (totalItemCount > previousTotal) {
loading = false;
previousTotal = totalItemCount;
currentPage++;
}
}
if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
// I load the next page of gigs using a background task,
// but you can call any function here.
new LoadGigsTask().execute(currentPage + 1);
loading = true;
}
}

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
}

Pagination listview in large data loading in Android

Just take the adapter as a class variable and set the adapter in onCreate(..)
and when you are reaching the end of ListView and updating the list view, just clear the my_array.clear(); then add data to it and notify the Listview adaapter.

Example Code:

Class myclass extends Activity
{
private ListviewAdapter adapter;
private ArrayList<String> my_array;

onCreate(...)
{
//Fill Values in the Array
my_array.add(...);
adapter = new ListviewAdapter(MainActivity.this, my_array);
list.setAdapter(adapter);
....

//In your onScrollListener() of the list make the following changes
list.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView arg0, int arg1) {

}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, final int totalItemCount) {
if (totalItemCount > 0)
{
int lastInScreen = firstVisibleItem + visibleItemCount;
if(lastInScreen == totalItemCount)
{
my_array.clear();
//Add the values in you Array here.
my_array.add(....)
//Notify the adapter about the data set change.
adapter.notifyDatasetChanged();
}
}
}
});

EDIT

For your undetected Button Clicks problem inside the list view.

Just set onClick attribute in the custom listview's layout file.

<Button
......
android:onClick="btnRemoveClick"
/>

and in your onClick method, do the Implementation of click events.

public void btnRemoveClick(View v)
{
//get the position of the button here
final int position = listviewItem.getPositionForView((View) v.getParent());
}

P.S: you need to set the ListView object as a class variable.

ListView paging in android

Here is one demo try this >

http://www.androidhive.info/2012/03/android-listview-with-load-more-button/

How can I implement paging in listview in android?

android listview pagination implementation

I suggest than you load list data in a custom Adapter class that extends BaseAdapter class. Like @oriolpons suggested, you should add a footer view, and when you click on button next call some method that is fetching next for example 20 rows, and then add them in your adapter object and call notifyDataSetChanged().

For example

private OnClickListener mListener = new OnClickListener() {

public void onClick(View v) {
ArrayList<YourObject> al = getSomeData(int startRow, int endRow);
MyCustomAdapter adapter = new MyCustomAdapter();
for(YourObject a : al)
adapter.add(a);
getListView.setAdapter(adapter);
notifyDataSetChanged();
}
};

Hope this helps.

Implement Pagination in ListView in Android

Kindly provide the logic/sample source code on how to implement the pagination if anyone has already implemented.

See my EndlessAdapter.



Related Topics



Leave a reply



Submit