0

TL;DR在 aViewPager中,我有Fragment两个子片段,当我在一个子片段中更改列表的背景颜色时,有时也会更改另一个子片段的背景颜色。

所以,我有ViewPager2 个片段,片段 1 ( FragmentOne) 有 2 个子片段FragmentOneAFragmentOneB片段 2 是FragmentTwo.

FragmentOneA只是一个Fragment并且FragmentOneB是一个ListFragment

FragmentOneB中,我在奇数行和偶数行之间设置颜色。奇数行为黄色,偶数行为白色。

因此,在 中ViewPager,我首先显示的片段FragmentOneFragmentOneA,然后我按下按钮FragmentOneA将那个片段替换为FragmentOneB.

这发生过:

1)我按下按钮FragmentOneA将其替换为FragmentOneB. 然后我按下后退按钮弹出堆栈。我这样做了几次。

2)有时,背景颜色FragmentOneA变为黄色。然后我又做了第 1) 次,在某个时候,背景变回了白色。

我只是不明白为什么会这样。

事件 1) 之前的图像,FragmentOneA白色背景:

片段一A

FragmentOneB单击蓝色按钮“Cari penerbangan”后显示的图像:

片段一B

FragmentOneA我做了几次事件编号 1) 之后的图像:

FragmentOne 错了

该代码Activity包含ViewPager

public class MyActivity extends ActionBarActivity {
    private static final int NUM_PAGES = 2;
    private ViewPager viewPager;
    private PagerAdapter adapter;
    private FragmentManager fragmentManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        fragmentManager = getSupportFragmentManager();

        adapter = new PagerAdapter(fragmentManager);
        viewPager = (ViewPager) findViewById(R.id.pager);
        viewPager.setAdapter(adapter);
    }

    @Override
    public void onBackPressed() {
        Fragment fragment = (Fragment) getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":"viewPager.getCurrentItem());

        if (fragment != null) { // could be null if not instantiated yet
            if (fragment.getView() != null) {
                // Pop the backstack on the ChildManager if there is any. If
                // not, close this activity as normal.
                if (!fragment.getChildFragmentManager().popBackStackImmediate()) {
                    finish();
                }
            }
        }
    }

    private class PagerAdapter extends FragmentPagerAdapter {

        public PagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
            case 0:
                FragmentOne d = new FragmentOne();
                return d;
            case 1:
                return new FragmentTwo();
            }
            return null;
        }

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

的代码FragmentOne

public class FragmentOne extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    FrameLayout root = new FrameLayout(getActivity());
    root.setId(R.id.layout_root);

    FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
    transaction.add(R.id.layout_root, new FragmentOneA());
    transaction.commit();

    return root;
}

}

FragmentOneA点击蓝色按钮时的代码:

FragmentTransaction transaction = getParentFragment().getChildFragmentManager().beginTransaction();
transaction.addToBackStack(null);
transaction.replace(R.id.layout_root, new FragmentOneB());
transaction.commit();

很长的帖子,但我已经多次查看我的代码,所以如果你知道什么,请给我一些答案。非常感谢你..

我的意思是,我只想使用奇偶行颜色,但不知何故会影响我的其他片段。

4

0 回答 0