بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

رفرش نشدن دیتا پس از NotifyDataSetChanged

مدیریت گفتگو
Pr0gramm3r 10 سال پیش
آخرین تغییر: 10 سال پیش

سلام دوستان

من وقتی یک سری اطلاعات جدید از سرور میگیرم به صورت JSON و بعد NotifyDataSetChanged میکنم , دیتای داخل گرید ویو رفرش نمیشه تا کلی اسکرول کنم به بالا و برگردم به پایین

از BaseAdapter و UIL استفاده میکنم برای لود عکس و ایجاد دیتا در گرید ویو

این هم بخشی از کد

 public void onResponse(String data) {
isAdding = false;
                try {
                    if (imagesCount == 0) {
                        Constants.latestItems= new String[0];
}
JSONArray apps = new JSONArray(data);
                    for (int i = 0; i < apps.length(); i++) {
                        JSONObject object = apps.getJSONObject(i);
StructWallpaper application = new StructWallpaper();
application.id = object.getString("id");
application.url = object.getString("link");
Constants.latestItems= addElement(Constants. latestItems,
application.url);
}
adapterLength = Constants.latestItems.length;
imageUrls = Constants.latestItems;
                    if (imagesCount == 0) {
                        imageAdapter = new ImageAdapter();
listView.setAdapter(new ImageAdapter());
listView.setOnScrollListener(listener);
} else if (imagesCount != 0) {
                        imageAdapter.notifyDataSetChanged();
}
                } catch (JSONException e) {
                    e.printStackTrace();
}

}

BaseAdapter :

 public class ImageAdapter extends BaseAdapter {

        private LayoutInflater inflater;

        ImageAdapter() {
            inflater = LayoutInflater.from(getActivity());
        }
        @Override
        public int getCount() {
            return imageUrls.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final ViewHolder holder;
            View view = convertView;
            if (view == null) {
                view = inflater
                        .inflate(R.layout.item_grid_image, parent, false);

                holder = new ViewHolder();
                assert view != null;
                holder.imageView = (ImageView) view.findViewById(R.id.imageGrid);
                holder.progressBar = (ProgressBar) view
                        .findViewById(R.id.progress);
                view.setTag(holder);
            } else {
                holder = (ViewHolder) view.getTag();
            }

            ImageLoader.getInstance().displayImage(imageUrls[position],
                    holder.imageView, options,
                    new SimpleImageLoadingListener() {
                        @Override
                        public void onLoadingStarted(String imageUri, View view) {
                            holder.progressBar.setProgress(0);
                            holder.progressBar.setVisibility(View.VISIBLE);
                        }

                        @Override
                        public void onLoadingFailed(String imageUri, View view,
                                                    FailReason failReason) {
                            holder.progressBar.setVisibility(View.GONE);
                        }

                        @Override
                        public void onLoadingComplete(String imageUri,
                                                      View view, Bitmap loadedImage) {
                            holder.progressBar.setVisibility(View.GONE);
                        }
                    }, new ImageLoadingProgressListener() {
                        @Override
                        public void onProgressUpdate(String imageUri,
                                                     View view, int current, int total) {
                            holder.progressBar.setProgress(Math.round(100.0f
                                    * current / total));
                        }
                    });
            return view;
        }
    }

 

 

نظرات

M.Karimi 10 سال پیش
یعنی از lazy loading استفاده میکنید؟ اگر نه شاید بخاطر تعداد زیاد اطلاعاتی باشه که از سرور میگیرید مثلا یهو 200 تا ایتم میخواد اضافه شه فشار میاد تا اینکه بخواد به صورت 10 تا 10 تا لود بشه.
Pr0gramm3r 10 سال پیش
بله از lazy loading استفاده میکنم
Pr0gramm3r 10 سال پیش
جالب اینه که اگه اسکرول کنم بالا و برگردم پایین دیتا ها نمایش داده میشه
M.Karimi 10 سال پیش
من از این کد استفاده کردم واسه لودینگ تو هر بار اسکرول هم وقتی سر سه تا مونده به اخری میرسه رفرش میشه. باید یکم باهاش کلنجار رفت تا درست بشه یادمه برای من هم این مشکل بود ولی درست شد . دقیق نمیدونم از کجا بود (: ! در پاسخ زیر میزارم کد رو..

پاسخ‌ها 1

M.Karimi 10 سال پیش

کد مربوط به lazy loading ::

  grdloading.setOnScrollListener(new OnScrollListener() {

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
int lastItem = firstVisibleItem + visibleItemCount;

if (adapter.getCount() >= 10 && lastItem > adapter.getCount() - 3) {
boolean isLoading = false;
if ( !isLoading) {

params.add(new BasicNameValuePair("part", "" + lastItem));

new Thread(new Runnable() {

@Override
public void run() {
try {
result = Webservice.readUrl("لینک مربوطه", params);
}
catch (Exception e) {}

if (result != null) {
G.HANDLER.post(new Runnable() {

@Override
public void run() {
try {
G.tasks.clear();
JSONArray tasks = new JSONArray(result);
for (int i = 0; i < tasks.length(); i++) {
JSONObject object = tasks.getJSONObject(i);
StructTask task = new StructTask();

<ابجکت ها نوشته میشن>
G.tasks.add(task);
}
}
catch (JSONException e) {
e.printStackTrace();

}
adapter.notifyDataSetChanged();
}
});

}
}
}).start();

isLoading = true;
}
}
}


public void onScrollStateChanged(AbsListView view, int scrollState) {}

});

سمت سرور رو هم که میدونید دیگ خودتون!

نظرات

Pr0gramm3r 10 سال پیش
ممنون بابت کد ولی من کدشو دارم و اجرا کردم , و وقتی اسکرول میرسه اونجا دیتا ها اضافه میشه ( به آرایه ) اما نمایش داده نمیشه
M.Karimi 10 سال پیش
کد همون قسمت رو بزارید .از سرور اوکی هستش همه چی؟

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .