我有2个片段,FragmentB
和FragmentC
,它们是从FragmentA
继承的。
和MainActivity
与supportFragmentManager
一起在片段之间切换。
用户可以在FragmentB
和FragmentC
中将其姓名插入EditText
。
每个片段在其布局上都有自己的EditText
。
但是当我在片段之间切换时,我希望两个片段的当前值都相等。
因此,如果用户在FragmentB
上输入名称“ ab”并切换到FragmentC
他将在EditText
上看到“ ab”并可以附加“ c”,因此当他切换回FragmentB
时,他将在EditText
上看到“ abc”。
我已经提到两个片段都是从FragmentA
继承的,我想通过在EditText
上声明受保护的FragmentA
来做到这一点,因此FragmentB
和FragmentC
将初始化EditText
。
并将TextWatcher
添加到此EditText
,但在切换片段时文本未正确更新。
还有其他想法,我该如何真正创建共享的EditText
,以便两个片段都可以更改并实时读取其值?
答案 0 :(得分:0)
在您的活动中,添加以下内容:
private String userName;
private String getUserName() {
return userName;
}
private void setUserName(String userName) {
this.userName = userName;
}
您可能还想通过userName
等来保存/恢复onSaveInstanceState()
,但是现在我们可以不用担心了。
在您的两个片段中,添加以下内容:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
MyActivity activity = (MyActivity) getActivity(); // replace with your activity class name
nameEditText.setText(activity.getUserName()); // replace with your EditText
}
然后在您的TextWatcher
中,将值重新设置为活动:
@Override
public void afterTextChanged(Editable s) {
MyActivity activity = (MyActivity) getActivity(); // replace with your activity class name
activity.setUserName(s.toString());
}