Android Lazylist加载相同的数据/图像
我目前正在使用Android的Lazylist at,将图像加载到我的listview中 我面临的问题是,加载的图像和数据在前两页是正确的。到达第三页时,加载的数据和图像再次与第一页相同,并且问题在后续页面中继续存在 例如: 第1页 当它到达第3页时 查看日期和加载的图像。都一样。 数据从网站上抓取,在web浏览器上查看时,网站正确发送数据 重复加载数据的原因是什么 主要活动Android Lazylist加载相同的数据/图像,android,android-listview,Android,Android Listview,我目前正在使用Android的Lazylist at,将图像加载到我的listview中 我面临的问题是,加载的图像和数据在前两页是正确的。到达第三页时,加载的数据和图像再次与第一页相同,并且问题在后续页面中继续存在 例如: 第1页 当它到达第3页时 查看日期和加载的图像。都一样。 数据从网站上抓取,在web浏览器上查看时,网站正确发送数据 重复加载数据的原因是什么 主要活动 public class MainActivity extends Activity { XMLParser p
public class MainActivity extends Activity {
XMLParser parser;
Document doc;
String xml;
ListView lv;
ListViewAdapter adapter;
ArrayList<HashMap<String, String>> menuItems;
ProgressDialog pDialog;
int limit = 8;
boolean loadingMore = false;
String URL = "http://test.com/5.php";
// Flag for current page
int current_page = 1;
@Override
public void onPause() {
super.onPause();
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onCreate(Bundle savedInstanceState) {
lv = (ListView) findViewById(R.id.list);
menuItems = new ArrayList<HashMap<String, String>>();
parser = new XMLParser();
new firstLoad().execute();
// Getting adapter
adapter = new ListViewAdapter(this, menuItems);
lv.setAdapter(adapter);
lv.setOnScrollListener(new OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
int lastInScreen = firstVisibleItem + visibleItemCount;
if ((lastInScreen == totalItemCount) && !(loadingMore)) {
new loadMoreListView().execute();
}
}
});
/**
* Async Task that send a request to url Gets new list view data Appends to
* list view
* */
private class loadMoreListView extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
// Showing progress dialog before sending http request
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Please wait..");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
protected Void doInBackground(Void... unused) {
loadingMore = true;
// increment current page
current_page += 1;
// Next page request
URL = URL + "?page=" + current_page;
xml = parser.getXmlFromUrl(URL); // getting XML
doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// looping through all item nodes <item>
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_NAME, parser.getValue(e, KEY_NAME));
map.put(KEY_IMG, parser.getValue(e, KEY_IMG));
map.put(KEY_DATE, parser.getValue(e, KEY_DATE));
map.put(KEY_WEBSITEURL, parser.getValue(e, KEY_WEBSITEURL));
map.put(KEY_IMAGEURL, parser.getValue(e, KEY_IMAGEURL));
// adding HashList to ArrayList
menuItems.add(map);
}
return (null);
}
protected void onPostExecute(Void unused) {
// closing progress dialog
runOnUiThread(new Runnable() {
public void run() {
// add things to do here
pDialog.dismiss();
// get listview current position - used to maintain scroll
// position
int currentPosition = lv.getFirstVisiblePosition();
Toast.makeText(getApplicationContext(), "Current on page " + String.valueOf(current_page), Toast.LENGTH_SHORT).show();
// Appending new data to menuItems ArrayList
adapter = new ListViewAdapter(MainActivity.this, menuItems);
lv.setAdapter(adapter);
// Setting new scroll position
lv.setSelectionFromTop(currentPosition + 1, 0);
loadingMore = false;
}
});
}
}
private class firstLoad extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
// Showing progress dialog before sending http request
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Loading..");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
protected Void doInBackground(Void... unused) {
loadingMore = true;
xml = parser.getXmlFromUrl(URL); // getting XML
doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// looping through all item nodes <item>
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_NAME, parser.getValue(e, KEY_NAME));
map.put(KEY_IMG, parser.getValue(e, KEY_IMG));
map.put(KEY_DATE, parser.getValue(e, KEY_DATE));
map.put(KEY_WEBSITEURL, parser.getValue(e, KEY_WEBSITEURL));
map.put(KEY_IMAGEURL, parser.getValue(e, KEY_IMAGEURL));
// adding HashList to ArrayList
menuItems.add(map);
}
// Appending new data to menuItems ArrayList
return (null);
}
protected void onPostExecute(Void unused) {
// closing progress dialog
runOnUiThread(new Runnable() {
public void run() {
loadingMore = false;
// add things to do here
pDialog.dismiss();
adapter = new ListViewAdapter(MainActivity.this, menuItems);
lv.setAdapter(adapter);
}
});
}
}
}
最后一个问题:
是否有保存listview状态的代码,以防止再次加载数据?当用户多次按back键结束此应用程序,并且再次打开时,数据将从第1页加载。是否有保存状态的代码,以便在用户之前停止的位置打开状态
谢谢