android - 使用 AsyncTask 加载更多 - Android

标签 android android-asynctask android-gridview

我有一个从 URL 获取的图像的 GridView ,当 Activity 开始时我加载了 24 张图像。现在当用户在底部滚动时,我需要加载例如。还有 8 张图像,但是当我这样做时,我的 Activity 正在重新加载并且没有加载新图像。有人可以帮我解决这个问题吗。

这是我的代码:

//load more images onclick
loadmore.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                start += 8;
                Log.v("--", start + " start");
                new getImagesTask().execute();
                adapter.notifyDataSetChanged();
                Log.v("--", images.size() + " G O L E M I N A !");
            }
        });

//and my asyncTask
public class getImagesTask extends AsyncTask<Void, Void, Void> {
        JSONObject json;
        ProgressDialog dialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            dialog = ProgressDialog.show(Main.this, "",
                    getString(R.string.loading_));
        }

        @Override
        protected Void doInBackground(Void... params) {

            URL url;
            if (start < totalItemCount) {
                //
                // while (start < totalItemCount) {

                try {
                    Log.v("--", start + "");
                    url = new URL(jsonURL + initialKeyWord + parameters + start);
                    URLConnection connection = url.openConnection();
                    String line;
                    StringBuilder builder = new StringBuilder();
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(connection.getInputStream()));
                    while ((line = reader.readLine()) != null) {
                        builder.append(line);
                    }

                    json = new JSONObject(builder.toString());
                    JSONObject responseObject = json
                            .getJSONObject("responseData");
                    JSONArray resultArray = responseObject
                            .getJSONArray("results");
                    int golemina = resultArray.length();
                    for (int k = 0; k < golemina; k++) {
                        images.add(getImageList(resultArray).get(k));
                    }

                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                start += 8;

                this.doInBackground();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            ((GridView) list).setAdapter(adapter);
            if (dialog.isShowing()) {
                dialog.dismiss();
            }
            adapter.notifyDataSetChanged();
            Log.v("--", images.size() + " g o l e m i n a");

        }
    }

最佳答案

((GridView) list).setAdapter(adapter); 应该出现在你 Activity 的 onCreate() 而不是 onPostExecute() . 刷新 ListView 中的数据。在 AsyncTaskonPostExecute() 中调用 adapter.notifyDataSetChanged() 之前,您必须修改 images Arraylist/p>

关于android - 使用 AsyncTask 加载更多 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17917601/

相关文章:

android - 如何在多线程中取消DefaultHttpClient执行过程

android - EditText 一直返回 null?

java - 替换事务后使用嵌套 fragment 重用 fragment

android - API 16 至 19 上 AsyncTask 中的 java.lang.ClassNotFoundException

android - BottomSheet 对话框打开不止一次

android - 如何正确居中 GridView?

Android Ion 缓存刷新

java - Android 如何从 onpreexecute 传递 GetText 来执行 onBackground

android - 在适配器中显示相同的图像文件 - Android

android - 禁用 GridView 滚动