无法在Backstack中添加/恢复Fragment sameclass

时间:2015-12-22 14:54:28

标签: android android-fragments

我使用一项活动来处理多项细节。

ActivityA有一个产品列表,当您点击此列表中的任何项目时,请致电ActivityB传递产品ID:

ActivityA

 Intent i = new Intent(this, ProductDetail.class);
    i.putExtra("pID", product.getId());
    i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    i.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
    startActivity(i);

onCreateonNewIntent方法中,我以这种方式处理它:

protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Bundle bundle = new Bundle(); //bundle to send data to the fragment
        bundle.putInt("pID", intent.getExtras().getInt("pID"));
        ProductDetail details = new ProductDetail();
        details.setArguments(bundle);
        loadFragment(details);
    }

如果找到具有相同pID标记的片段,则必须添加或返回到特定片段的loadFragment

public void loadFragment(ProductDetail fragment) {
        fm = getFragmentManager();
        Log.d("TagFrag", "TAG: "+ pID); //can get pID from global variable or extra from fragment
        if(fm.findFragmentByTag(pID+"") !=null) {
            Log.d("TagFrag", "Already Added");
            fm.popBackStack(pID+ "", 0);

        } else {

            Log.d("TagFrag", "New Added");
            ft = fm.beginTransaction();
            ft.add(R.id.fragments, fragment, pID+ "");
            ft.commit();
            fm.executePendingTransactions();

        }

它显示的是"New Added"还是"Already Added",但fm.popBackStack(pID+ "", 0);仅显示最后添加的片段。

例如:

  

点击第1项 - > addFragment - >显示项目1详细信息

     

点击第2项 - > addFragment - >显示项目2详细信息

如果我返回Item列表并再次单击Item1,则行为为:

  

点击项目 1 - > fragmentAlreadyAdded - >显示项目 2 详细信息   为什么不再显示第1项?

1 个答案:

答案 0 :(得分:0)

你真的在backstack上添加了什么吗?检查fm.getBackStackEntryCount()。如果为0,则需要添加交易:ft.addToBackStack(tag)