问题:

从上图的这个界面跳转到某个联系人的具体界面,但是上图中的fragment没有执行onPause(),onStop(),onDestoryView()方法,于是这个为被销毁的界面会影响联系人具体界面的操作。
所以不得不,手动摧毁这个界面,于是,在载入联系人具体界面之前,现将上图界面hide()
fragment = fm.findFragmentByTag("0").getChildFragmentManager().findFragmentByTag("contacts");
if(fragment!=null){
Log.e(TAG, "contacts已存在");
// fragment.onPause();
// fragment.onStop();
// fragment.onDestroyView();
fm.beginTransaction().hide(fragment).commit();
}
此时,如果在联系人具体界面点击返回按钮,上面中的界面会为空,是因为,界面没有被show()出来,所以监听返回按钮,show()这个界面。
// 监听实体回退按钮,只有对view设置了焦点,回退按钮 和 向上导航才能被监听到
view.setFocusableInTouchMode(true);
view.requestFocus();
view.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
fragment = (ContactsFragmentTab) fm.findFragmentByTag("0").getChildFragmentManager().findFragmentByTag("contacts");
fm.beginTransaction().show(fragment).commit();
break;
default:
break;
}
return false;
}
});监听向上导航
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.e(TAG, "onOptionsItemSelected");
switch (item.getItemId()) {
case android.R.id.home:
fragment = (ContactsFragmentTab) fm.findFragmentByTag("0").getChildFragmentManager().findFragmentByTag("contacts");
fm.beginTransaction().show(fragment).commit();
// called when the up affordance/carat in actionbar is pressed
getActivity().onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
注:为了fragment的重用,fragment与其他fragment的交互最好都放在他们的activity中进行,使用接口来实现之间的相互操作,见另外几篇博文:
http://blog.csdn.net/zqx198810/article/details/9401475