【问题标题】:Please help me with fragments请帮我处理碎片
【发布时间】:2014-11-03 08:24:06
【问题描述】:

我有带有框架布局的活动,其中加载了片段。 Activity 有一个带有列表的侧边栏。

  1. 打开片段1
  2. 打开片段2
  3. 打开片段3

如果我点击“打开 fragment1”,fragment1 仅在其中打开列表。 如果我点击“open fragment2”或“open fragment3”会打开fragment2或fragment3里面的任何信息。

如果我单击片段 1,列表中的一个项目会打开另一个片段,例如“someFragment”和 backstack 中的片段 1。

现在,如果我打开侧边菜单,并尝试打开 fragment2 或 fragment3,它就会打开。但是当点击“返回”然后 someFragment fragment1 重叠。

//open fragment1 click
                        Fragment fragment1 = new Fragment1 ();
                        fragmentManager.beginTransaction().replace(R.id.content_frame, fragment1).commit();

//open fragment2 click
                        Fragment fragment2 = new Fragment2 ();
                        fragmentManager.beginTransaction().replace(R.id.content_frame, fragment2 ).commit();
//open fragment3 click
                        EmployeessList fragment3 = new fragment3 (getString(R.string.employee_list_link));
                        fragmentManager.beginTransaction().replace(R.id.content_frame, fragment3 ).commit();

我需要在打开新的片段时进行后台提纯

在片段 1 中

 @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

        FragmentTransaction fTrans = getFragmentManager().beginTransaction();
        Fragment someFragment= new SomeFragment();
        fTrans.replace(R.id.content_frame, someFragment);
        fTrans.addToBackStack(null);
        fTrans.commit();
    }

【问题讨论】:

    标签: android


    【解决方案1】:

    在提交从侧面菜单调用的事务之前 - 添加以下代码:

    if (fragmentManager.getBackStackEntryCount() > 0) {
        fragmentManager.popBackStack(fragmentManager.getBackStackEntryAt(0).getId(),
           FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }
    

    这将清除您当前的后台堆栈。

    【讨论】:

    • @Sergey Balybin,张贴你的 logcat。
    【解决方案2】:

    更改替换为添加:

    fTrans.add(R.id.content_frame, someFragment);
    

    【讨论】:

    • 如果我在您打开 fragment2 之前更改为“添加”某些内容,那么首先打开 fragment1。即我在片段“someFragment”中单击“open fragment2”从backstack获取fragment1然后删除并在其位置安装fragment2
    • 我在创建 fragment1 时添加了日志,它们显示在再次调用 fragment2 之前,fragment1 被调用
    猜你喜欢
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2021-10-28
    • 1970-01-01
    • 2013-04-20
    • 2011-12-13
    相关资源
    最近更新 更多