Mam ListView z setOnScrollListener w celu pobrania dodatkowych danych z JSON, używam Asynctask aby uzyskać JSON. i JSON jest podzielony na 10 stron na stronę. Problem w tym, że podczas przewijania do samego dołu przewijanie zawsze wraca na górę po wyświetlania (do pobrania) większej ilości danych, na przykład, po ponownym uruchomieniu czynności.
Tak więc, jak sprawić, by zwój pozostać na miejscu i nie wracać na górę ?
Kod
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);
}
}