第一和第二片段显示相同的数据

时间:2016-11-11 17:04:06

标签: android-fragments android-viewpager fragmentstatepageradapter

我有6个片段,所有片段都具有相同的布局和功能,每个片段的数据[A,B,C,D,...]是不同的。当创建前两个片段时,我查看B,B然后是C,然后是D ......等等。从C向后滑动我得到正确的数据C,B,A。 我看不出我做错了什么。这是一些代码:

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {

    private final Bundle fragmentBundle;

    public ScreenSlidePagerAdapter(FragmentManager fm, Bundle data) {
        super(fm);
        fragmentBundle = data;
    }

    @Override
    public Fragment getItem(int position) {
        // creating fragment and passing int position for array and array
        return SoundFrag.newInstance(position, fragmentBundle);
    }

    @Override
    public int getCount() {
        return NUM_PAGES;
    }
}

和片段类:

public class SoundFrag extends Fragment{
    // fragment Id Postion
    private int fragPosition;
    private static final String KEY_POSITION="fragIntIdP";

    static SoundFrag newInstance(int position, Bundle arrayIntS) {
        SoundFrag frag=new SoundFrag();
        arrayIntS.putInt(KEY_POSITION, position);
        frag.setArguments(arrayIntS);

        return(frag);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        // retrive data from bundle passed by activity
        Bundle argsIn = getArguments();
        SoundArrayParcel arrayToReceive = argsIn.getParcelable("dataResId");
        final int[][] arrayResId = arrayToReceive.getInt();
        fragPosition = argsIn.getInt("fragIntIdP");

        // inflate the fragment
        final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.sounds_frag, container, false);

..... 我相信问题就在这里。前两个片段的fragPosition值始终为1,而不是0,然后是1.为什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

为了它的价值......

我更改了代码,以便不再通过Bundle将数组传递给片段。我现在只传递片段的位置值(来自getItem(int position)方法),并且一旦膨胀,数组就会在片段内“构建”。 我之前注意到的条件(第一个和第二个片段的fragposition为1)不再发生,应用程序正确显示信息。 为什么?不确定,但它确实有效。然而,我会继续调查,因为我不喜欢我找到的解决方案。