【问题标题】:Update Viewpager data dynamically动态更新 Viewpager 数据
【发布时间】:2017-10-05 17:45:03
【问题描述】:

我有一个我的自定义模型类的 ArrayList,我使用 AsyncTask 在我的Home_Fragment 中通过从 Internet 获取的图像的 URL 实例化它

第一次创建列表时,它有来自网站的 12 个项目/URL。 现在,我将这些信息传递给与我的ViewPager Adapter 链接的FullscreenView Activity

-> 我在我的Home_Fragment 中设置了一个onLoadMoreListener,它向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);
}

【问题讨论】:

    标签: java android android-fragments android-viewpager baseadapter


    【解决方案1】:

    首先创建一个 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();
    }
    
    ...
    

    希望对你有帮助,

    【讨论】:

      【解决方案2】:

      向 ArrayList 添加新项目后,只需使用 - 通知您的适配器更改

      arrayAdapter.notifyDataSetChanged();
      

      【讨论】:

      • @YuganshTyagi 你能用这段代码更新问题吗!谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多