更新Android Java中的ViewPager适配器

问题描述 投票:0回答:1

我正在将图像从数据库动态加载到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张图片,然后用户更改了上传的图片,...

java android android-viewpager
1个回答
0
投票

您使用adapter.notifyDataSetChanged()吗?

© www.soinside.com 2019 - 2024. All rights reserved.