在片段之间共享EditText值

时间:2018-10-28 16:14:46

标签: android android-fragments android-edittext

我有2个片段,FragmentBFragmentC,它们是从FragmentA继承的。 和MainActivitysupportFragmentManager一起在片段之间切换。 用户可以在FragmentBFragmentC中将其姓名插入EditText。 每个片段在其布局上都有自己的EditText。 但是当我在片段之间切换时,我希望两个片段的当前值都相等。 因此,如果用户在FragmentB上输入名称“ ab”并切换到FragmentC 他将在EditText上看到“ ab”并可以附加“ c”,因此当他切换回FragmentB时,他将在EditText上看到“ abc”。 我已经提到两个片段都是从FragmentA继承的,我想通过在EditText上声明受保护的FragmentA来做到这一点,因此FragmentBFragmentC将初始化EditText。 并将TextWatcher添加到此EditText,但在切换片段时文本未正确更新。 还有其他想法,我该如何真正创建共享的EditText,以便两个片段都可以更改并实时读取其值?

1 个答案:

答案 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());
}