片段显示重置 [英] Fragments display getting reset
问题描述
我已经在MainActivity上使用 TabLayout
和 ViewPager
设置了片段列表
I have setup a list of fragments using TabLayout
and ViewPager
on MainActivity as such
public class MainActivity extends AppCompatActivity implements Fragment1.OnFragmentInteractionListener, Fragment2.OnFragmentInteractionListener, Fragment3.OnFragmentInteractionListener, Fragment4.OnFragmentInteractionListener
, Fragment5.OnFragmentInteractionListener{
TabLayout tabLayout;
ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.viewPager);
viewPager.setAdapter(new CustomAdapater(getSupportFragmentManager(), getApplicationContext()));
tabLayout = (TabLayout) findViewById(R.id.tabLayout);
tabLayout.setupWithViewPager(viewPager);
tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#51ffff"));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
switch (tab.getPosition()) {
case 0:
tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#ced21f"));
break;
case 1:
tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#51ffff"));
break;
case 2:
tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#FF0000"));
break;
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
});
}
@Override
public void onFragmentInteraction(Uri uri) {
}
private class CustomAdapater extends FragmentPagerAdapter {
private String fragments[] = {"Control", "Connection", "Log", "Others", "Others2"};
public CustomAdapater(FragmentManager supportFragmentManager, Context applicationContext) {
super(supportFragmentManager);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new Fragment1();
case 1:
return new Fragment3();
case 2:
return new Fragment2();
case 3:
return new Fragment4();
case 4:
return new Fragment5();
default:
return null;
}
}
@Override
public int getCount() {
return fragments.length;
}
@Override
public CharSequence getPageTitle(int position) {
return fragments[position];
}
}
}
以某种方式,当我从Fragment1过渡到Fragment3并返回Fragment1时,Fragment1上的视图被重置为原始状态(就像刚创建的一样).
Somehow when I transit from Fragment1 to Fragment3 and back to Fragment1, the views on Fragment1 gets reset to original state(Like it was just created).
仅当我将2个片段从当前片段移开时才会发生.例如2-> 4或3-> 1.如果过渡相邻,则一切都很好,例如2-> 3或1-> 2.
This only happens if I transit 2 fragment away from the current Fragment. For example 2->4 or 3->1. Everything is fine if the transition is next to each other, for example 2->3 or 1->2.
这是我的第一个Android应用程序,请原谅我.
This is my first android app so do pardon me.
似乎正在创建一个新片段,而不是加载现有片段
It seems like it is creating a new fragment instead loading of existing ones
推荐答案
您的片段被破坏了,因为默认情况下 viewpager
每次移动时一次仅保留一个片段,因此您只需使用
Your fragment get destroyed due to the fact that by default viewpager
retain only one fragment at a time while moving around so you can simply use
viewPager.setOffscreenPageLimit(no_of_fragment_to_retain);
或
viewPager.setOffscreenPageLimit(3);
//根据您的情况
因此,当您从4-> 1或3-> 1返回时,将获得片段的先前存储状态.链接到文档
so when you come back from 4->1 or 3->1 you will get the previous stored state of your fragment. link to docs
这篇关于片段显示重置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!