【问题标题】:how do I restore the last ListFragment from the current Fragment如何从当前 Fragment 恢复最后一个 ListFragment
【发布时间】:2014-06-25 09:17:41
【问题描述】:

我的应用有这样的结构

MainActivity 扩展 ActionBarActivity -- 在按钮按下时 -> ListFragment --在列表项按下时-- > 片段

当在 Fragment 中时,如果按下返回键,它会直接转到 MainActivity 。我如何让它去 ListFragment

以下是我期望它做的事情

Fragment *----按下返回键-->*ListFragment --按下返回键---> MainActivity 扩展 ActionBarActivity

以下代码是我在 mainactivity 和 listfragment 中用来启动任何片段的代码

.........................................

             case 5:

           fragment = new HomeFragment();       
            break;
        default:
            break;
        }

        if (fragment != null) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.frame_container, fragment).commit();

            // update selected item and title, then close the drawer
            mDrawerList.setItemChecked(position, true);
            mDrawerList.setSelection(position);
            //getSupportActionBar().setSubtitle(navMenuTitles[position]);
            //setTitle(navMenuTitles[position]);
            mDrawerLayout.closeDrawer(mDrawerList);
        } else {
            // error in creating fragment
            Log.e("MainActivity", "Error in creating fragment");
        }

更新

现在我已将以下代码添加到我的 MainActivity

@Override
public void onBackPressed() {

       Fragment frag = getSupportFragmentManager().findFragmentById(R.id.frame_container);

       if((frag instanceof CommonMasjidPrayerTimes)) {
            finish();
        }
}

下面的代码到我的列表片段

FragmentManager fragmentManager = getActivity().getSupportFragmentManager();


                                //  fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit();
                            if (masjidNamazTimings != null) {
                                    FragmentTransaction ft = fragmentManager.beginTransaction();
                                    ft.addToBackStack(null);
                                    ft.replace(R.id.frame_container, masjidNamazTimings).commit();

                            }

现在当我按下列表片段或片段上的后退按钮时,它不会返回

【问题讨论】:

  • 你在使用FragmentTransaction和正确的replace/addToBackStack/hide吗?也许粘贴一些代码。

标签: android android-fragments android-listfragment fragmentmanager fragment-backstack


【解决方案1】:

您的代码应如下所示:

FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.frame_container, fragment).commit();
ft.addToBackStack(null);

试试这个。这将起作用。

【讨论】:

  • 我也需要把它放在 ListFragment 中吗?
  • 您需要为每个要添加到后台堆栈的Fragment 使用ft.addToBackStack(null) ...如果您不为某个Fragment 调用ft.addToBackStack(null),它将不会被添加到后台堆栈.
  • FragmentTransaction ft = fragmentManager.beginTransaction(); ft.addToBackStack(null);ft.replace(R.id.frame_container, fragment).commit();
【解决方案2】:

这不是缺少:.addToBackStack(null)吗? 见here

【讨论】:

    猜你喜欢
    • 2019-01-10
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多