繁体   English   中英

动态更新Viewpager数据

[英]Update Viewpager data dynamically

我有我的自定义模型类的ArrayList,它通过使用AsyncTaskHome_Fragment从Internet拍摄的图像的URL实例化。

第一次创建列表时,网站上有12个项目/ URL。 现在,我在链接到我的ViewPager AdapterFullscreenView Activity上传递这些内容

- >我已经设置了onLoadMoreListenerHome_Fragment ,增加了更多的项目到ArrayList,现在我想那些添加到我的ViewPager Adapter动态,我怎样才能做到这一点?

Home_Fragment

    class ReadHTML extends AsyncTask<String, Integer, String> {

    List list;

    @Override
    protected String doInBackground(String... params) {
            try {

                Document document = Jsoup.connect(params[0]).get();
                Element wall = document.select("ul.postul").first();
                //Log.i("LIST ", wall.toString());
                Elements url = wall.getElementsByAttribute("src");
                list = url.eachAttr("src");

                for (int i = 0; i < list.size(); i++) {
                    wallpaperNumber++;
                    String string = //Dummy
                    String septemp[] = //Dummy2
                    sep[1] = "http://" + string
                    wallpapersModelArrayList.add(new WallpapersModel(
                            string,///
                            sep[1],
                            "jpg",
                            wallpaperNumber
                    ));
                }
            }catch (Exception e){}
            return null;
    }

全屏活动

setContentView(R.layout.fullscreen_activity_view);

    toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    viewPager = findViewById(R.id.view_pager);

    arrayList = getIntent().getParcelableArrayListExtra("array");
    final int pos = getIntent().getIntExtra("position", 0);
    fullScreenSwipeAdapter = new 
    FullScreenSwipeAdapter(FullWallpaperViewActivity.this, arrayList);

    viewPager.setAdapter(fullScreenSwipeAdapter);
    viewPager.setCurrentItem(pos);
    viewPager.setOnTouchListener(new View.OnTouchListener(){}
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {}

ViewPager适配器

public FullScreenSwipeAdapter(Activity activity, ArrayList<WallpapersModel> arrayList) {
    this.activity = activity;
    this.arrayList = arrayList;
    Fresco.initialize(activity);
}

@Override
public int getCount() {
    return this.arrayList.size();
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return view == (object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {

    layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = layoutInflater.inflate(R.layout.fullwallpaper_view_layout, container, false);

    draweeView = v.findViewById(R.id.full_image_view);
    draweeView.setImageURI(arrayList.get(position).getWallpaperFullURL());

    container.addView(v);

    return v;


}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView((CoordinatorLayout)object);
}

将新项目添加到ArrayList之后,只需使用-将更改通知给适配器

arrayAdapter.notifyDataSetChanged();

首先创建一个新的ArrayAdapter实例,并设置所有新项,如下所示:

public class Activity() extends AppCompatActivity {

CustomArrayAdapter mArrayAdapter;
ViewPager mViewPager;

public void updateViewpager(){
    mArrayAdapter = new ArrayAdapter(context, itemList); // old items with new items
    mViewPager.setAdapter(mArrayAdapter);
    mArrayAdapter.notifyDataSetChanged();
}

...

希望能帮助到你,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM