【发布时间】:2017-08-29 17:46:59
【问题描述】:
我有一个包含并显示多个片段的活动。
当我重新输入片段时,它会自动填充所有编辑文本中的文本。所有字段的文本也相同。
例子:
打开片段,在两个editText中填入文字:
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 是我的自定义视图)
两个问题/问题:
- 如何防止activity/fragment/editText在fragment恢复时填写字段中的文本?
- 为什么要为所有字段填写相同的文本?
【问题讨论】:
-
可能您在某处恢复了已保存的状态。显示您的片段的代码
-
@SergeyGlotov 看代码。我没有恢复任何东西。 Android 会自动为添加到 backstack afaik 的片段保存 editTexts 的状态...
-
@SergeyGlotov Android 单独恢复 EditText 的状态,解决这个问题的一个 hacky 方法是继承 EditText 并覆盖 onRestoreSavedState 方法,在那里使用 setText("")。但同样,这是一个 hacky 解决方案
-
@Slugge 你为什么称其为 hacky 解决方案?
-
@peter 因为让它首先设置文本然后再次设置它以重置它是两个不必要的操作,最好防止状态保存。或者改变保存状态
标签: android android-fragments android-activity android-edittext android-savedstate