通过回收单个片段来使用viewpager

时间:2013-12-31 06:28:55

标签: android android-layout listview android-listview android-fragments

我创建了一个包含大约4-5个标签的viewpager。所有选项卡都将包含具有不同元素的列表视图。显然,所有片段都可以简单地膨胀单个布局文件,并将自己的东西添加到listview适配器。

实际上,我会有一堆列表视图并排。

我的问题是,如果我可以使用单个布局文件,我还可以使用单个片段吗?

据我所知,viewpager每个标签需要不同的片段。但鉴于我只是在每个选项卡中更改非常轻的列表视图(列表项= 1 textview),我可以通过使用viewpager的位置(打开选项卡)以某种方式回收相同的片段

无论如何,这是我的TitleAdapter:

public class TitleAdapter extends FragmentPagerAdapter{
    private String titles[] = new String[]{"View1","View2","View3"};
    private Fragment frags[] = new Fragment[titles.length]; 

    public TitleAdapter(FragmentManager fm) {
        super(fm);
        frags[0] = new FragmentView1();
        frags[1] = new FragmentView2();
        frags[2] = new FragmentView3();
    }

    @Override
    public CharSequence getPageTitle (int position){
        Log.v("TitleAdapter - getPageTitle=", titles[position]);
        return titles[position];
    }

    @Override
    public Fragment getItem(int position) {
        Log.v("TitleAdapter - getItem=", String.valueOf(position));
        return frags[position];
    }

    @Override
    public int getCount() {
        return frags.length;
    }

}

正如你所看到的,现在我有3个片段。但是,如果提供更好的性能甚至几千字节的应用程序大小,我也不想走错方向。 FragmentView是每个标签的片段,我在其中为同一个列表视图充气并在其中放入不同的数据。

那么,可以通过重复使用相同的单个片段来使用viewpager吗?或者我必须使用多个片段吗?

我想要最好的表现,就是这样。

2 个答案:

答案 0 :(得分:0)

使用多个片段tats的方式。而且片段不会像活动一样大小。所以继续前进。

答案 1 :(得分:0)

试试这个。

public class TitleAdapter extends FragmentPagerAdapter{
    private String titles[] = new String[]{"View1","View2","View3"};
    private Fragment frags; 

    public TitleAdapter(FragmentManager fm) {
        super(fm);
        frags = new FragmentView1();

    }

    @Override
    public CharSequence getPageTitle (int position){
        Log.v("TitleAdapter - getPageTitle=", titles[position]);
        return titles[position];
    }

    @Override
    public Fragment getItem(int position) {
        Log.v("TitleAdapter - getItem=", String.valueOf(position));
        frags.onPositionChange(position);
        return frags;
    }

    @Override
    public int getCount() {
        return titles.length;
    }

}

我不确定是否通过异常返回相同的片段。所以,让我知道会发生什么。