Android 使用片段和活动处理后退按钮?
我有一个“activity A”,它启动两个片段,home按钮是activity A的一部分,当从createFragment中按下back按钮时,它应该返回到activity A之前的activity,这在finish()方法中很好,但当我有第二个片段时,followersFragment添加到createFragment的顶部并隐藏createFragment(因为我不希望信息在创建过程中丢失),然后我点击后退按钮,它切换回创建片段,但当我点击createFragment的后退按钮时,它不再返回到活动A,并且什么也不做。。。没有错误 这是我在保存片段的活动(不是活动A)上的代码:Android 使用片段和活动处理后退按钮?,android,android-fragments,Android,Android Fragments,我有一个“activity A”,它启动两个片段,home按钮是activity A的一部分,当从createFragment中按下back按钮时,它应该返回到activity A之前的activity,这在finish()方法中很好,但当我有第二个片段时,followersFragment添加到createFragment的顶部并隐藏createFragment(因为我不希望信息在创建过程中丢失),然后我点击后退按钮,它切换回创建片段,但当我点击createFragment的后退按钮时,它不再
我认为您的代码设计使用了太多事务删除/显示和添加/隐藏。以及一些if/else模块的进一步复杂化。我建议简化代码设计。我看到很多帖子都有事务处理,代码无法解决,所以没有人能帮上忙。看在你的份上,这只是我的拙见。查找并替换这个
trans.hide(createPostFragment);trans.add(R.id.frame_容器,片段,null).commit();看看它是否有帮助
Hey Elltz你说的查找和替换是什么意思,切换顺序?而最初的安卓系统,我该如何简化它呢。。。。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar actions click
switch (item.getItemId()) {
// lets user travel back to where they came from
case android.R.id.home:
if(displayShown == 1) {
displayView(2, 0);
} else {
}
return true;
private void displayView(int i, int position) {
Log.d(Constants.DEBUG, "display view called " +position);
boolean createPost = true;
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
//avoid recreating createPostFragment if already created because all data will be erased
if(createPostFragment == null){
createPost = false;
Log.d(Constants.DEBUG, "fragment create DOES NOT EXIST ");
createPostFragment = new CreatePostFragment();
}
fragment = createPostFragment;
break;
case 1:
followerFragment = new FollowerFragment();
fragment = followerFragment;
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
trans = fragmentManager.beginTransaction();
//if createpostfrag already created just show
if (createPost && position == 0) {
trans.remove(followerFragment);
trans.show(createPostFragment);
trans.commit();
//hide createpostfrag so we can reuse
} else {
if(position == 1) {
Bundle extraData = new Bundle();
extraData.putInt("follow", i);
fragment.setArguments(extraData);
trans.add(R.id.frame_container, fragment, null).commit();
trans.hide(createPostFragment);
}
if(position == 0) {
trans.add(R.id.frame_container, fragment, "keepAlive").commit();
}
}
} else {
// error in creating fragment
Log.d(Constants.DEBUG, "Error in creating fragment or no fragment needed");
}
}