ViewPager创建重复的视图

时间:2015-04-27 10:19:56

标签: android android-fragments android-viewpager

这是我正在使用的PagingAdapter

public class PagingAdapter extends FragmentStatePagerAdapter {
    Context context;

    public PagingAdapter(FragmentManager fm, Context con) {
        super(fm);
        context = con;
    }

    @Override
    public Fragment getItem(int index) {
        try {
            switch (index) {
                case 0:
                    return Fragment.instantiate(context, ActivityFragment.class.getName());
                case 1:
                    return Fragment.instantiate(context, GroupFragment.class.getName());
                case 2:
                    return Fragment.instantiate(context, MessageFragment.class.getName());
                case 3:
                    return Fragment.instantiate(context, NotificationFragment.class.getName());
            }

            return null;
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
            return  null;
        }
    }

    @Override
    public int getCount() {
        // get item count - equal to number of tabs
        return 4;
    }
} 

这会为前两个标签创建相同的视图。我希望所有标签都有单独的内容 我将WebView放在所有4个标签中。

在活动中,我这样做:

mViewPager.setOffscreenPageLimit(3);

3 个答案:

答案 0 :(得分:0)

首先,您的方法instantiate正在返回片段吗?

是否使用setArguements在该方法中隐式添加了param,如果不是,您可能想要更改它。另一方面,FragmentManager将在需要时调用每个片段的默认构造函数。所以你必须保留它们(不要重载构造函数),并在destroyItem中尝试删除真实的片段。

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    getFragmentManager().beginTransaction().remove((Fragment)(object)).commit();
}

答案 1 :(得分:0)

在适配器中使用getItem,并在new使用return new ActivityFragment(); 实例化您的片段

fragment.setArgument(bundle);

如果您想添加捆绑信息而不是首先创建您的片段,而不是在

中添加捆绑包
if(0<=sparseArray.indexOfKey(position))
sparseArray.remove(position);

在调用super

之前在deateyItem中使用这些行
return

答案 2 :(得分:0)

你的意思是什么?你确定你没有在错误的布局中膨胀。

GroupClassFragment.java class

检查方法。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View myCorrectView = inflater.inflate(R.layout.my_correct_view,container,false);
    return myCorrectView;
}