Am ListView cu setOnScrollListener pentru a încărca mai multe date de la JSON, eu folosind Asynctask pentru a obține JSON. și JSON este paginat 10 pe pagină. Problema este atunci când defilare a ajuns la partea de jos, derulați sale de a reveni mereu la început după ce mai multe date afișate (încărcat), ca Activitatea este repornit.
Deci, cum a face scroll sta în poziție și nu a reveni la partea de sus ?
Cod
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);
}
}