Som ListView s setOnScrollListener ak chcete načítať ďalšie údaje zo JSON, i používanie Asynctask dostať JSON. a JSON je očíslovaná 10 na stranu. Problém je, keď rolovanie dosiahli dno, prejdite jej vždy vrátiť na vrchol po viac zobrazené údaje (nahrané), ako Aktivity sa nereštartuje.
Tak, ako urobiť prejdite pobyt v polohu a nevráti sa na vrchol ?
Kód
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0){
nextpage = nextpage + 1;
new getJSON().execute();
}
}
});
private class getJSON extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
footer.setVisibility(View.VISIBLE);
pDialog = new ProgressDialog(PoActivity.this);
pDialog.setMessage("Please Wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... voids) {
Handler handler = new Handler();
String po = handler.makeServiceCall(url + "?page=" + nextpage);
if (po != null){
try {
JSONObject obj = new JSONObject(po);
JSONArray objArray = obj.getJSONArray("data");
for (int i = 0; i < objArray.length(); i++){
JSONObject data = objArray.getJSONObject(i);
String employee = data.getString("name");
String status = data.getString("status");
HashMap<String, String> datarow = new HashMap<>();
datarow.put("emp", employee);
datarow.put("status", status);
polist.add(datarow);
}
}catch (final JSONException e){
Log.e(TAG, "Json parsing error: " + e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Json parsing error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}else {
Log.e(TAG,"Couldn't get json from server");
endpage = 0;
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "Couldn't get json from server. check logcat", Toast.LENGTH_SHORT).show();
}
});
}
pDialog.dismiss();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
pDialog.dismiss();
footer.setVisibility(View.GONE);
listAdapter = new SimpleAdapter(PoActivity.this, polist,
R.layout.po_row, new String[]{"emp", "status"},
new int[]{R.id.name, R.id.status});
listView.setAdapter(listAdapter);
}
}