0

TL;DR内にViewPager、2 つの子フラグメントを持つ がありFragmentます。一方の子フラグメントでリストの背景色を変更すると、もう一方の子フラグメントの背景色も変更されることがあります。

したがって、ViewPager2 つのフラグメントがあり、フラグメント 1 ( FragmentOne) には 2 つの子フラグメントがFragmentOneAありFragmentOneB、フラグメント 2 はFragmentTwoです。

FragmentOneAは でありFragmentFragmentOneBですListFragment

ではFragmentOneB、奇数行と偶数行の間に色を設定しています。奇数列は黄色、偶数列は白のみ。

の中で、ViewPager最初に表示するフラグメントFragmentOneFragmentOneAで、次にボタンを押しFragmentOneAてそのフラグメントを に置き換えましたFragmentOneB

これが起こりました:

1) ボタンを押し込んでFragmentOneAに置き換えましたFragmentOneB。次に、戻るボタンを押してスタックをポップしました。私はそれを数回しました。

2) の背景色FragmentOneAが黄色に変更されることがありました。そして、1) をもう一度実行したところ、ある時点で背景が白に戻りました。

なぜこれが起こったのか理解できません。

イベント前のイメージFragmentOneA1) 背景が白の場合:

FragmentOneA

FragmentOneBその青いボタン「Cari penerbangan」をクリックした後に表示される画像:

FragmentOneB

FragmentOneAイベント番号1)を数回実行した後の画像:

FragmentOneAが間違っている

そのコードは次の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