TL;DR内にViewPager
、2 つの子フラグメントを持つ がありFragment
ます。一方の子フラグメントでリストの背景色を変更すると、もう一方の子フラグメントの背景色も変更されることがあります。
したがって、ViewPager
2 つのフラグメントがあり、フラグメント 1 ( FragmentOne
) には 2 つの子フラグメントがFragmentOneA
ありFragmentOneB
、フラグメント 2 はFragmentTwo
です。
FragmentOneA
は でありFragment
、FragmentOneB
ですListFragment
。
ではFragmentOneB
、奇数行と偶数行の間に色を設定しています。奇数列は黄色、偶数列は白のみ。
の中で、ViewPager
最初に表示するフラグメントFragmentOne
はFragmentOneA
で、次にボタンを押しFragmentOneA
てそのフラグメントを に置き換えましたFragmentOneB
。
これが起こりました:
1) ボタンを押し込んでFragmentOneA
に置き換えましたFragmentOneB
。次に、戻るボタンを押してスタックをポップしました。私はそれを数回しました。
2) の背景色FragmentOneA
が黄色に変更されることがありました。そして、1) をもう一度実行したところ、ある時点で背景が白に戻りました。
なぜこれが起こったのか理解できません。
イベント前のイメージFragmentOneA
1) 背景が白の場合:
FragmentOneB
その青いボタン「Cari penerbangan」をクリックした後に表示される画像:
FragmentOneA
イベント番号1)を数回実行した後の画像:
そのコードは次の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();
長い投稿ですが、コードを何度も見直したので、何か知っていることがあれば回答をお願いします。どうもありがとう..
私の要点は、奇偶行の色を使用したいだけですが、どういうわけかそれが他のフラグメントに影響を与えるということです。