Android Lazylist加载相同的数据/图像

Android Lazylist加载相同的数据/图像,android,android-listview,Android,Android Listview,我目前正在使用Android的Lazylist at,将图像加载到我的listview中 我面临的问题是,加载的图像和数据在前两页是正确的。到达第三页时,加载的数据和图像再次与第一页相同,并且问题在后续页面中继续存在 例如: 第1页 当它到达第3页时 查看日期和加载的图像。都一样。 数据从网站上抓取,在web浏览器上查看时,网站正确发送数据 重复加载数据的原因是什么 主要活动 public class MainActivity extends Activity { XMLParser p

我目前正在使用Android的Lazylist at,将图像加载到我的listview中

我面临的问题是,加载的图像和数据在前两页是正确的。到达第三页时,加载的数据和图像再次与第一页相同,并且问题在后续页面中继续存在

例如: 第1页

当它到达第3页时

查看日期和加载的图像。都一样。 数据从网站上抓取,在web浏览器上查看时,网站正确发送数据

重复加载数据的原因是什么

主要活动

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页加载。是否有保存状态的代码,以便在用户之前停止的位置打开状态

谢谢