ViewPager表示数据数组

时间:2014-12-18 08:32:17

标签: android android-fragments

我有一个班级作为我的模特。

class Model {
    String name;
    String address;
}

我有一个带有'n'元素的类的对象数组。

List<Model> modelElements;

我正在尝试使用'n'个片段来实现ViewPager。 ViewPager中的每个片段都完全相同,但显示的数据是从模型的每个元素中选取的。我已经实现了一个基本的Fragment,它有两个TextView,每个TextView用于显示名称和地址。

我想知道如何将Model类的对象传递给每个Fragment。因此,modelElements [0]对应于ViewPager中的第一个Fragment,modelElements [1]对应于第二个Fragment,依此类推。

一种方法是使用Bundle。但是ViewPager创建Fragments的方式并没有让我接触到FragmentTransaction。

class MyViewPagerAdapter extends FragmentStatePagerAdapter {
    public MyViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        if (i == 0) {
            return MyFragment.newInstance();
        } else if (i == 1) {
            return MyFragment.newInstance();
        } else if (i == 2) {
            return MyFragment.newInstance();
        }
        return null;
    }
}

传递数据的最佳方式是什么?

另外,这听起来很愚蠢 - 为每组不同的数据创建相同Fragment的新实例。 Android提供的其他构造是否符合我的要求?

2 个答案:

答案 0 :(得分:1)

1)使您的模型实现Parcelable接口。

2)将您的模型传递给newInstance(),使其变为newInstance(Model model)

3)在newInstance()创建包中,设置片段的参数,其值为model

4)从onCreate

fragment中检索模型

答案 1 :(得分:0)

下面是我创建的演示代码,用于动态加载视图页面中的不同网址,但是在视图页面中有动态网址传递给每个视图,如下所示:

  // ... do other initialization, such as create an ActionBar ...

        pagerAdapter = new MainPagerAdapter();
        pager = (ViewPager) findViewById(R.id.view_pager);
        pager.setAdapter(pagerAdapter);

        WebView w1 = new WebView(MainActivity.this);

        w1.setWebViewClient(new WebViewClient());
        w1.loadUrl("http://www.google.com");

        WebView w2 = new WebView(MainActivity.this);

        w2.setWebViewClient(new WebViewClient());
        w2.loadUrl("http://www.live.com");

        pagerAdapter.addView(w1, 0);
        pagerAdapter.addView(w2, 1);

COMPLETE DEMO CODE