我正在将图像从数据库动态加载到ViewPager
中,并且用户可以更改图像。
例如,该用户可能已经上传了4张图像,然后用户更改了上传的图像,他可能已经拥有一张额外的图像以使图像变为5张,甚至更多,或者他可能已移除图像以将数量减少为3个或更少,或者他甚至可能删除2张图像,然后再次添加2张不同的图像,仍然使其成为4张图像,但是具有不同的图像。
[现在,当用户更改图像时,我将其发送到PHP
页面,在此页面上将其上传到服务器,并且图像URL在JSON对象中返回,然后尝试使用新内容更新ViewPager
。
但是问题是,当我尝试更新内容时,它没有更新。如果初始图像为4张,并且用户删除或添加了图像,则即使我打电话给ViewPager
并且旧图像也不会消失,viewPager.setOffscreenPageLimit(imageJsonObject.length())
仍显示4页。
我已经尝试过ViewPager PagerAdapter not updating the View的解决方案,但仍然无法正常工作。
PhotoAdapter.java
package com.package.name; import android.content.Context; import android.graphics.Bitmap; import android.os.Handler; import android.os.Looper; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.viewpager.widget.PagerAdapter; import java.util.ArrayList; public class PhotoAdapter extends PagerAdapter { private ArrayList<String> postFilesLists; private LayoutInflater layoutInflater; private Context context; ImageLoader imageLoader; public static Handler UIHandler; static { UIHandler = new Handler(Looper.getMainLooper()); } public static void runOnUI(Runnable runnable) { UIHandler.post(runnable); } public PhotoAdapter(ArrayList<String> postFilesLists, Context context) { this.postFilesLists = postFilesLists; this.context = context; imageLoader = new ImageLoader(context); // A class to download images } @Override public int getCount() { return postFilesLists.size(); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view.equals(object); } @Override public int getItemPosition(Object object) { return postFilesLists.indexOf(object); } public ArrayList<String> getAllItems() { return postFilesLists; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, final int position) { getItemPosition(container); layoutInflater = LayoutInflater.from(context); View view = layoutInflater.inflate(R.layout.post_image, container, false); ImageView imageView = (ImageView) view.findViewById(R.id.image); String imageUrl = postFilesLists.get(position); imageLoader.displayImage(imageUrl, imageView); imageView.post(new Runnable() { @Override public void run() { imageView.setTag("true"); } }); container.addView(view); return view; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { runOnUI(new Runnable() { @Override public void run() { container.removeView((View)object); } }); } }
用于设置ViewPager适配器的代码,也用于更新ViewPager的代码
postFilesLists = new ArrayList();
for (int i = 0; i < postFiles.length(); i++) {
String filePath = Constants.www + postFiles.getString(i);
postFilesLists.add(filePath);
}
photoAdapter = new PhotoAdapter(postFilesLists, context);
viewPager.setOffscreenPageLimit(postFiles.length());
viewPager.setAdapter(photoAdapter);
我正在将图像从数据库动态加载到ViewPager中,用户可以更改图像。例如,可能已经上传了4张图片,然后用户更改了上传的图片,...
您使用adapter.notifyDataSetChanged()
吗?