我有一个包含并显示多个片段的活动。
当我重新输入片段时,它会自动填充所有editTexts中的文本。所有字段的文本也相同。
示例:
打开片段并在两个editTexts中填写文字:
CustomEditText1:[______]
CustomEditText2:[_ acb__]
CustomEditText3:[_ qwe __]
点击后退按钮并重新输入片段
CustomEditText1:[_ qwe__]
CustomEditText2:[_ qwe__]
CustomEditText3:[_ qwe __]
这是我在片段中覆盖的方法:
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是我的自定义视图)
两个问题/问题:
答案 0 :(得分:12)
在朋友的帮助下找到了问题!
在Android中的editTexts上,SaveEnabled默认为true。
解决方案只需设置:
setSaveEnabled(false);
在你的editText上。
这就是为什么android为所有字段填写相同的值: https://trickyandroid.com/saving-android-view-state-correctly/
事实证明,Android在同一层次结构中具有相同ID的视图恢复状态的方式并不是很明智(即使在具有不同ID的父视图中)。此链接说明了如何使其正确执行。我只是将其关闭,因为我将状态保存在ViewModel对象中并从我的片段的onCreateView()中恢复它。
答案 1 :(得分:2)
这不是答案,但它解决了问题:
由@Slugge评论:
覆盖自定义editText中的onSaveInstanceState方法并清除文本/从那里做你想做的事。