使用getParcelableArrayList将数组数组传递给同一片段的多个实例

时间:2016-02-03 12:45:39

标签: arraylist fragment bundle

我有一个TabLayout,每个标签中都有一个片段。第一个选项卡是片段实例,下一个选项卡具有相同片段的实例:

adapter.addFragment(fragmentoFichaSerie.newInstance(ficha, cookie), "Ficha");
        for (HTMLParser.temporada objTemporada : ficha.temporadas)
        {
         adapter.addFragment(fragmentoCapitulos.newInstance(objTemporada.capitulos, cookie), objTemporada.nombre);
        }

“ficha.temporadas”包含“n”“capitulos”数组。每个片段都会收到一个“capitulos”数组。

fragmentoCapitulos包含一个RecyclerView,我用对象的ArrayList填充(每个项从一个数组的位置获取其数据)。

在片段中,我在“newInstance”方法中接收数组,并将其与putParcelableArrayList放在一个包中。

public static fragmentoCapitulos newInstance(List<HTMLParser.capitulo> capitulos, String Cookie) {
        fragmentoCapitulos fragment = new fragmentoCapitulos();
        Bundle args = new Bundle();
        args.putParcelableArrayList("capitulos", (ArrayList<HTMLParser.capitulo>) capitulos);
        fragment.setArguments(args);
        cookie = Cookie;
        return fragment;
    }

在onCreateView中,我获得了包的内容:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.capitulos, container, false);

        RecyclerView recycler = (RecyclerView) view.findViewById(R.id.recCapitulos);
        TextView empty = (TextView) view.findViewById(R.id.empty);
        ImageView imgEmpty = (ImageView) view.findViewById(R.id.imgEmpty);

        ArrayList<HTMLParser.capitulo> capitulos;
        capitulos = getArguments().getParcelableArrayList("capitulos");

我的问题是如果我在标签2中,我应该收到第一个“ficha.temporadas”数组,但我收到第二个数组(第一个标签包含另一个不需要任何数组的片段)。 / p>

我尝试将void数组传递给第一个选项卡但不起作用。如何将正确的数组传递给每个片段?

1 个答案:

答案 0 :(得分:0)

最后我找到了解决方案。我错了问题,而不是一个可以解决的错误。

当viewpager动态创建页面时,总是在当前页面的两侧生成页面。这样做不正确。在调试了大量时间并阅读了大量文章后,我通过FragmentStatePagerAdapter更改了FragmentPagerAdapter并且一切正常。

我希望这对有同样问题的人有所帮助。