在fragment使用hide和show的方式来切换的情况下,当app被切到后台再切回来的时候,有的手机可能内存不够用了,会导致致fragment重叠
解决方法:
1:给每个Fragment加一个Tag;
2:在onSaveInstanceState中保存tab选中的状态
3.在onCreate(Bundle savedInstanceState)中判断Bundle savedInstanceState是否不为空,
不为空则进行find Tag,重新给几个frament赋值。
具体如下:
1.
<span style="font-family: Arial, Helvetica, sans-serif;">private static final String[] FRAGMENT_TAG = {"msgfrag","contacfrag","actfrag","settfrag"};</span>
switch (index) {
case 0:
// 当点击了消息tab时,改变控件的图片和文字颜色
messageImage.setImageResource(R.drawable.message_selected);
messageText.setTextColor(Color.WHITE);
if (messageFragment == null) {
// 如果MessageFragment为空,则创建一个并添加到界面上
messageFragment = new MessageFragment();
transaction.add(R.id.content, messageFragment, FRAGMENT_TAG[index]);
} else {
// 如果MessageFragment不为空,则直接将它显示出来
transaction.show(messageFragment);
}
break;
2.
/**
* 上一次界面 onSaveInstanceState 之前的tab被选中的状态 key 和 value
*/
private static final String PRV_SELINDEX="PREV_SELINDEX";
private int selindex=0;
@Override
protected void onSaveInstanceState(Bundle outState) {
//保存tab选中的状态
outState.putInt(PRV_SELINDEX,selindex);
super.onSaveInstanceState(outState);
}
3.
/**
* 上一次界面 onSaveInstanceState 之前的tab被选中的状态 key 和 value
*/
private static final String PRV_SELINDEX="PREV_SELINDEX";
private int selindex=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
// 初始化布局元素
initViews();
fragmentManager = getFragmentManager();
if (savedInstanceState != null) {
//读取上一次界面Save的时候tab选中的状态
selindex=savedInstanceState.getInt(PRV_SELINDEX,selindex);
messageFragment = (MessageFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG[0]);
contactsFragment = (ContactsFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG[1]);
newsFragment = (NewsFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG[2]);
settingFragment = (SettingFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG[3]);
}
// 选中index
setTabSelection(selindex);
}
/**
* 上一次界面 onSaveInstanceState 之前的tab被选中的状态 key 和 value
*/
private static final String PRV_SELINDEX="PREV_SELINDEX";
private int selindex=0;
@Override
protected void onSaveInstanceState(Bundle outState) {
//保存tab选中的状态
outState.putInt(PRV_SELINDEX,selindex);
super.onSaveInstanceState(outState);
}
3.
/**
* 上一次界面 onSaveInstanceState 之前的tab被选中的状态 key 和 value
*/
private static final String PRV_SELINDEX="PREV_SELINDEX";
private int selindex=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
// 初始化布局元素
initViews();
fragmentManager = getFragmentManager();
if (savedInstanceState != null) {
//读取上一次界面Save的时候tab选中的状态
selindex=savedInstanceState.getInt(PRV_SELINDEX,selindex);
messageFragment = (MessageFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG[0]);
contactsFragment = (ContactsFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG[1]);
newsFragment = (NewsFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG[2]);
settingFragment = (SettingFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG[3]);
}
// 选中index
setTabSelection(selindex);
}
/**
* 上一次界面 onSaveInstanceState 之前的tab被选中的状态 key 和 value
*/
private static final String PRV_SELINDEX="PREV_SELINDEX";
private int selindex=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
// 初始化布局元素
initViews();
fragmentManager = getFragmentManager();
if (savedInstanceState != null) {
//读取上一次界面Save的时候tab选中的状态
selindex=savedInstanceState.getInt(PRV_SELINDEX,selindex);
messageFragment = (MessageFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG[0]);
contactsFragment = (ContactsFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG[1]);
newsFragment = (NewsFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG[2]);
settingFragment = (SettingFragment) fragmentManager.findFragmentByTag(FRAGMENT_TAG[3]);
}
// 选中index
setTabSelection(selindex);
}