我在做什么::
- 我在按下 Actionbar 按钮时将 fragment 添加到容器中 同时我隐藏了之前的 fragment
- 现在按下后退键我只想显示隐藏的 fragment
发生了什么::
- 不再显示之前的 fragment ,而是删除了整个 Activity
- 如何克服这个问题
- 我也试过 onBackpressed ... 还是一样的结果
发生此操作的代码::
}else if(item.getItemId()==R.id.searchID){
/*Intent intent=new Intent(MainActivity.this,SearchActivity.class);
startActivity(intent);*/
ft1=getSupportFragmentManager().beginTransaction();
ft1.hide(fragment1);
ft1.add(R.id.content_frame, fragSearch);
ft1.commit();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
ft1=getSupportFragmentManager().beginTransaction();
ft1.show(fragment1);
ft1.commit();
}
return super.onKeyDown(keyCode, event);
}
{完整代码}
MainActivity.java
public class MainActivity extends SherlockFragmentActivity implements OnItemClickListener{
private DrawerLayout drawlayout=null;
private ListView listview=null;
private ActionBarDrawerToggle actbardrawertoggle=null;
FragmentTransaction ft1 ;
FragSearch fragSearch=new FragSearch();
mFragSortingHome fragment1=new mFragSortingHome();
private String[] myfriendname=null;
private int[] photo=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.drawer_activity_main);
//Code moved to a seperate function from onCreate with a call in it for clarity
drawerConfig(savedInstanceState);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
actbardrawertoggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
actbardrawertoggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==android.R.id.home)
{
if(drawlayout.isDrawerOpen(listview))
{
drawlayout.closeDrawer(listview);
}
else {
drawlayout.openDrawer(listview);
}
}else if(item.getItemId()==R.id.searchID){
/*Intent intent=new Intent(MainActivity.this,SearchActivity.class);
startActivity(intent);*/
ft1=getSupportFragmentManager().beginTransaction();
ft1.hide(fragment1);
ft1.add(R.id.content_frame, fragSearch);
ft1.commit();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
ft1=getSupportFragmentManager().beginTransaction();
ft1.show(fragment1);
ft1.commit();
}
return super.onKeyDown(keyCode, event);
}
. . . .
. . . . . other code . . .. . . . . .
. . . .
{编辑}
else if(item.getItemId()==R.id.searchID){
/*Intent intent=new Intent(MainActivity.this,SearchActivity.class);
startActivity(intent);*/
ft1=getSupportFragmentManager().beginTransaction();
//ft1.hide(fragment1);
ft1.add(R.id.content_frame, fragSearch);
ft1.addToBackStack(null);
ft1.commit();
return true;
}
return super.onOptionsItemSelected(item);
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
getSupportFragmentManager().popBackStack();
}
return super.onKeyDown(keyCode, event);
}
我可以回到之前的 fragment ,但 Activity 也立即被删除,我无法阻止 Activity 被删除
最佳答案
在返回时尝试弹出当前 fragment 以显示前一个 fragment
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
getActivity().getSupportFragmentManager().popBackStack();
}
return super.onKeyDown(keyCode, event);
}
当添加一个 fragment 时,你也应该将它添加到backstack..所以放在ft1.commit()之前;
ft1.addToBackStack(null);
关于android - 显示在 android 中按下的隐藏 fragment onbackkey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23420447/