For eg:- if i load first 5 items in a list then on scrolling down load next five items
and as it is a endlessadapter this procedure must repeat endlessly this is how i tried -->foliowing is my demoadapter code:-
public class MyDemoAdapter extends EndlessAdapter {
private static int cutting_int =5;
public static int batch_repeat = 0;
public int check_batch = 0;
private Context mcontxt;
private RotateAnimation rotate = null;
ArrayList<DownloadOffersClass> tempList = new ArrayList<DownloadOffersClass>();
private static int mLastOffset = 0;
private ArrayList<DownloadOffersClass> list = new ArrayList<DownloadOffersClass>();
private int LIST_SIZE;
public MyDemoAdapter(Context context, int textViewResourceId,
ArrayList<DownloadOffersClass> list, int lIST_SIZE) {
super(new DownloadedOffersAdapter(context,
R.layout.offer_listview_item, list));
this.mcontxt = context;
this.list = list;
this.LIST_SIZE = lIST_SIZE;
rotate = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF,
0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotate.setDuration(600);
rotate.setRepeatMode(Animation.RESTART);
rotate.setRepeatCount(Animation.INFINITE);
}
@Override
protected View getPendingView(ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mcontxt
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.row, null);
View child = row.findViewById(android.R.id.text1);
child.setVisibility(View.GONE);
child = row.findViewById(R.id.throbber);
child.setVisibility(View.VISIBLE);
child.startAnimation(rotate);
return (row);
}
@Override
protected boolean cacheInBackground() {
SystemClock.sleep(2000);
if (check_batch != batch_repeat) {
tempList.clear();
int lastOffset = getLastOffset();
if (lastOffset < LIST_SIZE) {
int limit = lastOffset + cutting_int;
for (int i = (lastOffset + 1); (i <= limit && i < LIST_SIZE); i++) {
tempList.add(list.get(i));
}
setLastOffset(limit);
if (limit < 50) {
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
@Override
protected void appendCachedData() {
if (getWrappedAdapter().getCount() < 50) {
@SuppressWarnings("unchecked")
DownloadedOffersAdapter a = (DownloadedOffersAdapter) getWrappedAdapter();
check_batch = check_batch + 1;
Log.v("Check", " " + check_batch);
for (int i = cutting_int; i < cutting_int + cutting_int; i++) {
a.add(list.get(i));
}
}
}
public static void setLastOffset(int i) {
mLastOffset = i;
}
private int getLastOffset() {
return mLastOffset;
}
}
Modify your cacheInBackground()
if (check_batch != batch_repeat) {
tempList.clear();
int lastOffset = getLastOffset();
if (lastOffset < LIST_SIZE) {
int limit = lastOffset + cutting_int;
for (int i = (lastOffset + 1); (i <= limit && i < LIST_SIZE); i++) {
tempList.add(list.get(i));
}
setLastOffset(limit);
if (limit <= 50) {
return true;
} else {
return false;
}
} else {
return false;
}
} else {
if (!firstTry) {// use this boolean to do it only once
tempList.clear();
int notDivisible = LIST_SIZE % cutting_int;
if (!(notDivisible == 0)) {
firstTry = true;
return true;
} else {
return false;
}
}
return false;
}
And replace your appendCachedData() method with this:
protected void appendCachedData() {
DownloadedOffersAdapter a = (DownloadedOffersAdapter) getWrappedAdapter();
if (check_batch != batch_repeat) {
if (getWrappedAdapter().getCount() <= 50) {
check_batch = check_batch + 1;
Log.v("Check", "append chk_batch " + check_batch);
for (int i = cutting_int; i < cutting_int + cutting_int; i++) {
a.add(list.get(i));
}
}
} else {// Append extra entries to list i.e less than cutting_int
int notDivisible = LIST_SIZE % cutting_int;
for (int i = (LIST_SIZE - notDivisible); i < LIST_SIZE - 1; i++) {
a.add(list.get(i));
}
return;
}
}