Android à l'Aide de GridView avec OnScrollListener

Je suis en train de construire un gridview qui contient beaucoup d'images susceptibles autour de 1000++ photos. Pour réduire le temps de chargement pour le contrôle gridview, je veux mettre en œuvre un onScrollListener à l'aide de AbsListView. Je vais limite de 20 images par vue, puis lors du défilement atteigne le fond il va charger un autre de 20 images. Cette fonction permet de répéter jusqu'à ce que toutes les images ont été chargées.

J'ai cherché sur google des échantillons, mais n'a pas l'air d'en trouver un qui convient à mes codes. Quelqu'un pourrait-il svp me guider comment c'est fait? Je suis actuellement à l'aide imageloader Lazylist pour mes images. Je suis aussi à l'aide de AsyncTask.

MainGridView.class

    public class MainGridView extends SherlockActivity {
private ProgressDialog pDialog;
ArrayList<HashMap<String, String>> songsList;
static final String KEY_SONG = "song"; 
static final String KEY_ID = "id";
static final String KEY_TITLE = "title";
static final String KEY_ARTIST = "artist";
static final String KEY_CAT_ARTIST = "artistcat";
static final String KEY_DURATION = "duration";
static final String KEY_THUMB_URL = "thumb_url";
static final String KEY_BIG_URL = "big_url";
static final String KEY_CAT_URL = "cat_url";
static String IMAGE_POSITION;
GridView grid;
MainGridViewLazyAdapter adapter;
String cat_url;
String artist_url;
private int visibleThreshold = 5;
private int currentPage = 0;
private int previousTotal = 0;
private boolean loading = true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gridview_main);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
checkInternetConnection();
grid = (GridView) findViewById(R.id.grid_view);
grid.setOnScrollListener(new OnScrollListener() {
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
//TODO Auto-generated method stub
if (loading) {
if (visibleItemCount > totalItemCount) {
loading = false;
previousTotal = totalItemCount;
currentPage++;
}
}
if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
//I load the next page of gigs using a background task,
//but you can call any function here.
new loadGridView().execute(currentPage + 1);
loading = true;
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
//TODO Auto-generated method stub
}
});
}
public class loadGridView extends AsyncTask<Integer, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainGridView.this);
pDialog.setTitle("Connect to Server");
pDialog.setMessage("This process can take a few seconds to a few minutes, depending on your Internet Connection Speed.");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected String doInBackground(Integer... args) {
//updating UI from Background Thread
Intent in = getIntent();
songsList = new ArrayList<HashMap<String, String>>();
cat_url = in.getStringExtra(KEY_CAT_URL);
artist_url = in.getStringExtra(KEY_CAT_ARTIST);
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(cat_url); //getting XML from URL
Document doc = parser.getDomElement(xml); //getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_SONG);
//looping through all song nodes <song>
for (int i = 0; i < nl.getLength(); i++) {
//creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
//adding each child node to HashMap key => value
map.put(KEY_ID, parser.getValue(e, KEY_ID));
map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST));
map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION));
map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));
map.put(KEY_BIG_URL, parser.getValue(e, KEY_BIG_URL));
//adding HashList to ArrayList
songsList.add(map);
}
return null;
}   
@Override
protected void onPostExecute(String args) {
ActionBar   ab = getSupportActionBar();
ab.setTitle(artist_url);
adapter=new MainGridViewLazyAdapter(MainGridView.this, songsList);   
grid.setAdapter(adapter);
pDialog.dismiss();
}
}
Mon code ne fonctionne pas comme prévu. Il vient de charges de tous mes éléments gridview, puis quand j'ai faites défiler vers le bas il actualise simplement. Quelqu'un peut m'aider?

OriginalL'auteur KC Chai | 2012-08-29