私のアプリではFragmentStatePagerAdapter
、ViewPager
.
私がバックグラウンドから来て、メモリが消去されたときを除いて、すべてうまくいっています。
その場合、一部のthe fragments have disappeared
. 消えた破片は見えませんが、ホールスクリーンを取ります。何も見えません。
何が原因でしょうか?
ありがとう!
私のアプリではFragmentStatePagerAdapter
、ViewPager
.
私がバックグラウンドから来て、メモリが消去されたときを除いて、すべてうまくいっています。
その場合、一部のthe fragments have disappeared
. 消えた破片は見えませんが、ホールスクリーンを取ります。何も見えません。
何が原因でしょうか?
ありがとう!
問題定義が貧弱であることを考えると、考えられる解決策は次のとおりです。
アクティビティが再作成された後、フラグメントが再表示されています。したがって、ビュー内のウィジェットは前のアクティビティにリンクされており、onCreateView() でビューを正しく再インフレートしてウィジェットを再接続していません (findByID() コマンドをやり直しています)。
アクティビティが再作成されるたびに、すべてのフラグメントが onCreateView() でこれらのことをやり直す必要があります。
私はこのコードを使用しています...別のファイル(おそらくTestViewPager.java)でこれをテストして、それが機能するかどうかを確認し、コードに適応する可能性があります。
私にとっては...魔法のように機能します:Pしかし...私はAndroidの初心者なので、別のコードソリューションが必要になるかもしれません(スペイン語ですみません:P)
public class Home_ViewPager extends ActionBarActivity
implements ActionBar.TabListener {
funcionPagerAdapter miPagerAdapter;
ViewPager miViewPager;
public void onCreate(Bundle EstadoInstanciaSalvada){
super.onCreate(EstadoInstanciaSalvada);
setContentView(R.layout.home_viewpager);
miPagerAdapter = new funcionPagerAdapter(getSupportFragmentManager());
miViewPager = (ViewPager) findViewById(R.id.vpContenedor);
miViewPager.setAdapter(miPagerAdapter);
final ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//Set a Tab when a Fragment is selected
miViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
actionBar.addTab(actionBar.newTab().setText(R.string.tab1_title).setTabListener(this));
actionBar.addTab(actionBar.newTab().setText(R.string.tab2_title).setTabListener(this));
actionBar.addTab(actionBar.newTab().setText(R.string.tab3_title).setTabListener(this));
actionBar.addTab(actionBar.newTab().setText(R.string.tab4_title).setTabListener(this));
actionBar.addTab(actionBar.newTab().setText(R.string.tab5_title).setTabListener(this));
actionBar.addTab(actionBar.newTab().setText(R.string.tab6_title).setTabListener(this));
miViewPager.setCurrentItem(1);
}
@Override
public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
}
@Override
public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
miViewPager.setCurrentItem(arg0.getPosition());
}
@Override
public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
}
public static class funcionPagerAdapter extends FragmentPagerAdapter{
public funcionPagerAdapter(FragmentManager fm){
super(fm);
}
@Override
public Fragment getItem(int itemCapturado) {
switch(itemCapturado){
case 0: return new fragment_1();
case 1: return new fragment_2();
case 2: return new fragment_3();
case 3: return new fragment_4();
case 4: return new fragment_5();
case 5: return new fragment_6();
default:
Fragment miFragmento = new fragment_1();
return miFragmento;
}
}
@Override
public int getCount() {
return 6;
}
}
public static class fragment_1 extends ListFragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
String[] arrayDeValores = new String[] { "yourItem1", "yourItem2", "yourItem3", "yourItem4", "yourItem5", "yourItem6"};
setListAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, arrayDeValores));
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// Do something with the data
}
}
//Others Fragments Here...
}
Fragmentsに設定してみonCreate
てください。setRetainInstance(true);