如何在弹出EditText上面的所有片段之后清除它?

时间:2017-07-19 13:41:54

标签: android android-fragments fragment-backstack

在Android项目中,我有3个片段,我在用户操作过程中浏览它们。

  

FragmentA - > FragmentB - > FragmentC

当用户完成操作时,我执行popBackStack返回FragmentA

if(getFragmentManager()!=null)
    if(getFragmentManager().getBackStackEntryCount()>0) {
        getFragmentManager().popBackStack(getFragmentManager()
                    .getBackStackEntryAt(0)
                    .getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }

我的问题是:

我有EditText,用户在其中写了一些文字,在调用popBackStack()之后,片段会显示文字仍然存在。

有没有办法知道该片段已被弹出并重置为EditText

修改

这是我用来进入下一个屏幕的地方:

try {
    String backStateName = ((Object) fragment).getClass().getName();
    String fragmentTag = backStateName;

    ft = getSupportFragmentManager().beginTransaction();

    ft.add(R.id.container, fragment, fragmentTag);
    ft.setTransition(FragmentTransaction.TRANSIT_NONE);
    if (addToBackStack)
        ft.addToBackStack(backStateName);
    ft.commit();

} catch (Exception e) {
    Logging.logException(e);
}

1 个答案:

答案 0 :(得分:0)

这可以使用标志轻松完成。

我们的想法是,当调用popBackStack()时,活动会设置一个标志,FragmentA将在其onResume()中对其进行检查。

简化步骤:

  1. 弹出FragmentC时,请执行以下操作:

    clearEditTextOfA = true;
    
  2. 在FragmentA的onResume()
  3. 执行此操作:

    if (activityCallback.shouldClearEditText()) {
        editText.setText("");
    }
    

    activityCallback是一个接口,它允许片段与其所在的活动进行通信。请参阅Android Docs

  4. 不是ft.add(),而是ft.replace()

    这会使你的片段的onResume()在他们改变时被调用。