Android 从保存的实例还原片段时,如何防止editText自动填充文本?

Android 从保存的实例还原片段时,如何防止editText自动填充文本?,android,android-fragments,android-activity,android-edittext,android-savedstate,Android,Android Fragments,Android Activity,Android Edittext,Android Savedstate,我有一个包含并显示多个片段的活动 当我重新输入片段时,它会自动填充所有编辑文本中的文本。所有字段也使用相同的文本 例如: 打开片段并在两个编辑文本中填写文本: CustomEditText1:[\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu] CustomEditText2:[[uACB\uuuU] CustomEditText3:[[uqwe] 单击后退按钮并重新输入片段 CustomEditText1:[[uqwe\uuuxWe] CustomEditText2:[[uq

我有一个包含并显示多个片段的活动

当我重新输入片段时,它会自动填充所有编辑文本中的文本。所有字段也使用相同的文本

例如:

打开片段并在两个编辑文本中填写文本:
CustomEditText1:[\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu]
CustomEditText2:[[uACB\uuuU]
CustomEditText3:[[uqwe]

单击后退按钮并重新输入片段
CustomEditText1:[[uqwe\uuuxWe]
CustomEditText2:[[uqwe\uuuxWe]
CustomEditText3:[[uqwe]

这是我在片段中覆盖的方法:

public AddBookingFragment() {
    // Required empty public constructor
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    tabsActivity = (TabsActivity) getActivity();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_add_booking, container, false);

    lastNameEditText = (NASEditText) view.findViewById(R.id.nas_add_booking_last_name);
    pnrEditText = (NASEditText) view.findViewById(R.id.nas_add_booking_pnr);

    addButton = (NASButton) view.findViewById(R.id.nas_add_booking_add_button);
    scanButton = (NASButton) view.findViewById(R.id.nas_add_booking_scan_button);

    confirmationBox = (LinearLayout) view.findViewById(R.id.nas_add_booking_confirmation_box);
    confirmationText = (NASHeaderAndSubtext) view.findViewById(R.id.nas_add_booking_confirmation_text);
    confirmationBox.setVisibility(View.GONE);

    bindButtons();

    FontHelper.setFont(container, tabsActivity);
    return view;
}
通过调试,我可以看到editText正在通过在重写的OnTextChanged中设置断点来设置文本

这是来自该断点的堆栈跟踪:
(NASEditText是我的自定义视图)

两个问题:

  • 恢复片段时,如何防止activity/fragment/editText填充字段中的文本
  • 为什么所有字段都填写相同的文本

  • 这不是答案,但它解决了问题:

    正如@Slugge所评论的:

    在自定义editText中重写onSaveInstanceState方法并清除文本/从中执行所需操作。

    在朋友的帮助下发现问题

    SaveEnabled在Android中的EditText上默认为true


    解决方案就是设置:
    setSaveEnabled(假)
    
    在你的编辑文本上


    事实证明,Android在如何恢复相同层次结构中具有相同ID的视图的状态(即使在具有不同ID的父视图中)方面不是很聪明。我之所以关闭此选项,是因为我将状态保存在ViewModel对象中,并从片段的onCreateView()还原它。

    可能您在某个地方还原了保存的状态。显示您的代码fragment@SergeyGlotov看看代码。我没有恢复任何东西。Android正在自动为添加到backstack afaik中的片段保存EditText的状态…@SergeyGlotov Android单独恢复EditText的状态,该问题的一个黑客解决方案是对EditText进行子类化,并在其中使用setText(“”)覆盖onRestoreSavedState方法。但同样,这是一个骇客solution@Slugge你为什么称之为黑客解决方案?@peter因为让它先设置文本,然后再次设置以重置文本是两个不成功的操作,所以最好阻止状态保存。或者改变保存状态在Xamarin中有这个问题,我花了很长时间才弄清楚发生了什么,因为我的调用堆栈毫无价值。非常感谢你的回答!“此链接解释了如何使其正确运行(如果您希望):链接已失效,我希望在不使用ViewModel的情况下正确处理它,请提供帮助?