1,问题:
应用长期在后台的场景下,进入前台时,fragment显示为空白
2,app框架大体实现:
1个activity+多个Fragment,使用的是add()方法以及 hide(),show()方法,显示fragment
3,相关代码:
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 判断 savedInstanceState是否为空:
setCanResizeWindow(false);
maskView = new View(getApplicationContext());
maskView.setBackground(new ColorDrawable(Color.parseColor("#30000000")));
maskView.setClickable(true);
maskView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
removeMask();
}
});
setContentView(R.layout.activity_home);
EventBus.getDefault().register(this);
//3,个推
PushManager.getInstance().initialize(getApplicationContext());
initView(savedInstanceState);
getUserData();
getDataFromMsgBrief();
}
private void initView(Bundle savedInstanceState) {
mBottomDial = (LinearLayout) findViewById(R.id.btn_Dial);
mBottomComm = (LinearLayout) findViewById(R.id.btn_comm);
mBottomContact = (LinearLayout) findViewById(R.id.btn_contact);
mBottomLife = (LinearLayout) findViewById(R.id.btn_life);
mBottomDialIv = (ImageView) findViewById(R.id.tab_dial_image);
mBottomDiaTv = (TextView) findViewById(R.id.tab_dial_text);
mSmsIV = (SmsImageView) findViewById(R.id.siv_sms_icon_homeact);
//第一次登录系统时,修改数据库的Istravelrely字段
if (!SpUtils.getSynDB(getApplicationContext())) {
ThreadPoolUtil.getmExecutor().execute(new Runnable() {
@Override
public void run() {
CopyLocalContactsUtils.checkIsTravelRely(getApplication());
SpUtils.setSynDB(getApplicationContext());
}
});
}
//初始化mBottomDial为选中状态,fl_content填充DialFragment
mBottomDial.setSelected(true);
// if (savedInstanceState != null) {
// LogUtils.d("HomeActivity savedInstanceState != null");
//
// Fragment dialFragment = getSupportFragmentManager().findFragmentByTag(DIAL_TAG);
// Fragment contactFragment = getSupportFragmentManager().findFragmentByTag(CONTACT_TAG);
// Fragment commFragment = getSupportFragmentManager().findFragmentByTag(COMM_TAG);
// Fragment lifeFragment = getSupportFragmentManager().findFragmentByTag(LIFE_TAG);
//// getSupportFragmentManager().beginTransaction()
//
// getSupportFragmentManager().beginTransaction().hide(contactFragment)
// .hide(commFragment).hide(lifeFragment).show(dialFragment).commit();
//
// } else {
getSupportFragmentManager().beginTransaction().
add(R.id.fl_content, FragmentFactory.createFragment(0), "DialFragment").
add(R.id.fl_content, FragmentFactory.createFragment(1), "CommFragment").
add(R.id.fl_content, FragmentFactory.createFragment(2), "ContactFragment").
add(R.id.fl_content, FragmentFactory.createFragment(3), "LifeFragment").
hide(FragmentFactory.createFragment(1)).
hide(FragmentFactory.createFragment(2)).
hide(FragmentFactory.createFragment(3)).
show(FragmentFactory.createFragment(0)).commit();
// }
initClick();
}
尝试过的解决办法:
1,为了解决多个fragment重叠显示,在activity的中执行了如下:
@Override
protected void onSaveInstanceState(Bundle outState) {
// super.onSaveInstanceState(outState);
}
问题现象:
Penyelesaian ini salah Ia akan menyebabkan kandungan paparan sebelumnya tidak dapat diingati selepas aktiviti dimusnahkan, sekali gus menjadikan antara muka kosong
Untuk menyelesaikan serpihan yang bertindih, anda boleh mengulas dengan hebat. onSaveInstanceState(outState ), tambah kod untuk menyimpan serpihan semasa
Kemudian peroleh semula serpihan sebelumnya apabila anda kembali, dan kemudian paparkannya semula
Kandungan agak kemas untuk keperluan anda, disyorkan untuk menggunakan
FragmentTabHost
, dan tidak akan ada masalah yang tidak kemas.Hanya gunakan ViewPager terus