J'ai ListView avec setOnScrollListener pour charger plus de données JSON, je l'aide Asynctask pour obtenir JSON. et le JSON est paginé 10 par page. Le problème, c'est quand le défilement atteint le fond, la barre de son toujours revenir au top après plus de données affichées (chargé), comme l'Activité est redémarré.
Alors, comment faire le défilement de rester en position et de ne pas revenir la dessus ?
Code
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);
}
}