【问题标题】:How do I clear EditText after all fragments above it have been popped?弹出上面的所有片段后,如何清除 EditText?
【发布时间】:2017-07-19 13:41:53
【问题描述】:

在一个 Android 项目中,我有 3 个片段,我在用户执行操作期间浏览它们。

片段A -> 片段B -> 片段C

当用户完成操作后,我做一个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);
}

【问题讨论】:

  • 为此,您可以在 FragmentA 的 onResume 中进行编码,只需在您的 onResume 中执行此操作 edittext.setText("");
  • 当我popbackstack时,它似乎没有通过FragmentA上的onResume方法
  • 您是否在 fragmentTransactions 中添加了 Fragment 或替换了​​ Fragments?
  • @Ric 只需设置 youreditText.setText("");当您从一个片段移动到另一个片段时。您知道当您从一个片段移动到另一个片段时,只需对其进行编码,这对您来说非常容易。
  • 但是当我从 FragmentB 返回到 A 时,EditTextBox 将被重置,我只想重置它,当我完成该过程并调用该 popbackstack 时

标签: android android-fragments fragment-backstack


【解决方案1】:

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

这个想法是,当调用popBackStack() 时,Activity 会设置一个标志,FragmentA 将在其onResume() 中检查该标志。

简化步骤:

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

    clearEditTextOfA = true;
    
  2. 在 FragmentA 的 onResume() 中,执行以下操作:

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

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

  3. 不要使用ft.add(),而是使用ft.replace()

    这将使您的 Fragment 的 onResume() 在它们发生变化时被调用。

【讨论】:

  • 我试过了,但由于某种原因,没有调用 onResume()
  • 我已经更新了答案。您应该使用fragmentTransaction.replace() 而不是fragmentTransaction.add()。然后您的问题将得到解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 2013-02-04
相关资源
最近更新 更多