بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
رفرش نشدن دیتا پس از NotifyDataSetChanged
سلام دوستان
من وقتی یک سری اطلاعات جدید از سرور میگیرم به صورت 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; } }
0
0

یعنی از lazy loading استفاده میکنید؟ اگر نه شاید بخاطر تعداد زیاد اطلاعاتی باشه که از سرور میگیرید مثلا یهو 200 تا ایتم میخواد اضافه شه فشار میاد تا اینکه بخواد به صورت 10 تا 10 تا لود بشه. (8 سال پیش)
0
0

بله از lazy loading استفاده میکنم (8 سال پیش)
0
0

جالب اینه که اگه اسکرول کنم بالا و برگردم پایین دیتا ها نمایش داده میشه (8 سال پیش)
+1
0

من از این کد استفاده کردم واسه لودینگ تو هر بار اسکرول هم وقتی سر سه تا مونده به اخری میرسه رفرش میشه. باید یکم باهاش کلنجار رفت تا درست بشه یادمه برای من هم این مشکل بود ولی درست شد . دقیق نمیدونم از کجا بود (: ! در پاسخ زیر میزارم کد رو.. (8 سال پیش)
برای این سوال 1 پاسخ وجود دارد.

پاسخ به سوال
M.Karimi
8 سال پیش
+1
0
کد مربوط به 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) {}
});
سمت سرور رو هم که میدونید دیگ خودتون!
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .