将 Android 碎片带回初始状态
Bringing back Android Fragments in its initial state
我正在尝试编写一个包含两个片段的应用程序。顶部片段 'A' 包含两个用于用户 ID 和密码的 EditText 字段。底部片段 'B' 包含一个登录按钮。我第一次登录该应用程序时,一切正常,应用程序继续显示另一个片段 'C',该片段已替换片段 'A'。底部片段 'B' 现在显示注销按钮。单击此按钮时,我返回片段 A 以替换 C,并显示用户 ID 和密码字段。
我遇到的问题是在第二次运行时。片段 A 仍然保留第一次运行时用户 ID 和密码的原始值。如果我使用 EditText 的 getText.clear 或 setText("") 方法,字段将变为空,但是当我按下登录按钮时,它会抱怨字段为空,即使我输入了值。
能否请您告诉我如何将片段 A 恢复到初始状态? TIA
这是代码:
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
showLogon(btnLeft, btnRight, fragmentTransaction);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
private void showLogon(final Button btnLeft, final Button btnRight, FragmentTransaction fragmentTransaction) {
//EditText uid = ((EditText) getActivity().findViewById(R.id.editUserid));
//uid.setText("");
//EditText pwd = ((EditText) getActivity().findViewById(R.id.editPassword));
//pwd.setText("");
Login login = new Login();
//getFragmentManager().beginTransaction().replace(R.id.topFrame, login).commit();
fragmentTransaction.replace(R.id.topFrame, login);
btnLeft.setText("Login");
btnRight.setVisibility(View.GONE);
btnRight.setEnabled(false);
}
当您用片段 a 替换片段 c 时,创建片段 a 的新实例
getSupportFragmentManager().beginTransaction().replace(R.id.llContainer, new FragmentA()).commit();
当我从片段 B 执行 "getActivity().findViewById(R.id.userid));" 时,它会拾取以前的值,但如果我从片段 A 执行 "getView().findViewById(R.id.userid));",它会拾取正确的值。 R.id.userid 驻留在片段 A 布局中。如果我从片段 B 执行 getView,我会得到 NullPointerException。所以我在片段 A 的 edittext 上声明了一个文本观察器,它加载了片段 B 可以访问的成员变量,这似乎解决了问题。如果有更好的方法,请告诉我。再次感谢。
我正在尝试编写一个包含两个片段的应用程序。顶部片段 'A' 包含两个用于用户 ID 和密码的 EditText 字段。底部片段 'B' 包含一个登录按钮。我第一次登录该应用程序时,一切正常,应用程序继续显示另一个片段 'C',该片段已替换片段 'A'。底部片段 'B' 现在显示注销按钮。单击此按钮时,我返回片段 A 以替换 C,并显示用户 ID 和密码字段。
我遇到的问题是在第二次运行时。片段 A 仍然保留第一次运行时用户 ID 和密码的原始值。如果我使用 EditText 的 getText.clear 或 setText("") 方法,字段将变为空,但是当我按下登录按钮时,它会抱怨字段为空,即使我输入了值。
能否请您告诉我如何将片段 A 恢复到初始状态? TIA 这是代码:
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
showLogon(btnLeft, btnRight, fragmentTransaction);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
private void showLogon(final Button btnLeft, final Button btnRight, FragmentTransaction fragmentTransaction) {
//EditText uid = ((EditText) getActivity().findViewById(R.id.editUserid));
//uid.setText("");
//EditText pwd = ((EditText) getActivity().findViewById(R.id.editPassword));
//pwd.setText("");
Login login = new Login();
//getFragmentManager().beginTransaction().replace(R.id.topFrame, login).commit();
fragmentTransaction.replace(R.id.topFrame, login);
btnLeft.setText("Login");
btnRight.setVisibility(View.GONE);
btnRight.setEnabled(false);
}
当您用片段 a 替换片段 c 时,创建片段 a 的新实例 getSupportFragmentManager().beginTransaction().replace(R.id.llContainer, new FragmentA()).commit();
当我从片段 B 执行 "getActivity().findViewById(R.id.userid));" 时,它会拾取以前的值,但如果我从片段 A 执行 "getView().findViewById(R.id.userid));",它会拾取正确的值。 R.id.userid 驻留在片段 A 布局中。如果我从片段 B 执行 getView,我会得到 NullPointerException。所以我在片段 A 的 edittext 上声明了一个文本观察器,它加载了片段 B 可以访问的成员变量,这似乎解决了问题。如果有更好的方法,请告诉我。再次感谢。