【问题标题】:How add new items in listview from asynctask with jsoup如何使用 jsoup 从 asynctask 在 listview 中添加新项目
【发布时间】:2014-12-09 20:01:39
【问题描述】:

我有一个麻烦...

滚动后我需要分页,它可以工作,但随后从新的 url 页面加载新项目,旧项目已删除,但我想在旧项目下方添加新项目而不删除。我正在尝试使用无限适配器,但应用程序已终止。

我找到了work example,但我现在不知道如何添加我的代码there

// code from onCreateView...
new ListViewLoad().execute("1");

// acynctask with loading
    private class ListViewLoad extends AsyncTask<String, Void, Void> {
    String pNum;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mProgressDialog = new ProgressDialog(getActivity());
        mProgressDialog.setTitle("Loading");
        mProgressDialog.setMessage("Loading...");
        mProgressDialog.setIndeterminate(false);
        mProgressDialog.show();
    }

    @Override
    protected Void doInBackground(String... urls) {
        arraylist = new ArrayList<HashMap<String, String>>();
        pNum= urls[0];
        try {
            Document doc = Jsoup.connect("http://url.com?page="+pNum).get();
            for (Element table : doc.select("#search_result_container")) {
                for (Element row : table.select(".search_result_row")) {
                    HashMap<String, String> map = new HashMap<String, String>();
                    Elements app_title = row.select(".search_name");
                    Elements app_price = row.select(".search_name");
                    Elements app_released = row.select(".search_released");
                    Elements app_img = row.select(".search_capsule img[src]");
                    String app_img_Str = app_img.attr("src");
                    map.put("rank", app_title.text());
                    map.put("country", app_price.text());
                    map.put("population", app_released.text());
                    map.put("flag", app_img_Str);
                    arraylist.add(map);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        listview = (ListView) getView().findViewById(R.id.listview);
        adapter = new ListViewAdapter(getActivity(), arraylist);

        listview.setAdapter(adapter);
        listview.setOnScrollListener(new OnScrollListener() {

            @Override
            public void onScrollStateChanged(AbsListView view,
                    int scrollState) { // TODO Auto-generated method stub
                int threshold = 1;
                int count = listview.getCount();

                if (scrollState == SCROLL_STATE_IDLE) {
                    if (listview.getLastVisiblePosition() >= count
                            - threshold) {
                        String pNumNew = String.valueOf(Integer.parseInt(pNum)+1);
                        Toast.makeText(getActivity().getApplicationContext(), pNumNew, Toast.LENGTH_LONG).show();
                        new ListViewLoad().execute(pNumNew);
                    }
                }
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
            }

        });
        mProgressDialog.dismiss();
    }
}

【问题讨论】:

  • arraylist = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;(); 是否保存您的数据?
  • 我找到了work example,但我现在不知道如何添加我的代码there
  • 试试这个,把arraylist = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;();--->改成--->if(arraylist == null) {arraylist = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;();}
  • 天哪,这行得通!这很容易...添加您的评论作为答案请...

标签: android parsing listview android-asynctask jsoup


【解决方案1】:

正如您已经了解的那样,arraylist 变量保留了您的所有数据。每次调用加载更多数据的操作时,变量都会再次初始化。这行得通

if(arraylist == null) arraylist = new ArrayList<HashMap<String, String>>();

【讨论】:

    猜你喜欢
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    相关资源
    最近更新 更多