我正在尝试用两个片段编写一个应用程序。顶部片段' A'包含用于用户标识和密码的两个EditText字段。底部片段' B'包含一个登录按钮。我第一次登录应用程序时,事情的工作方式完全正确,应用程序继续显示另一个片段“C'它取代了片段' A'。底部片段' B'现在显示一个注销按钮。当我单击此按钮时,我返回片段A以替换C,并显示用户ID和密码字段。
我面临的问题是在第二次运行期间。片段A仍保留第一次运行时用户标识和密码的原始值。如果我使用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);
}
答案 0 :(得分:1)
当你用片段a替换片段c时,创建片段a的新实例 getSupportFragmentManager()。beginTransaction()。replace(R.id.llContainer,new FragmentA())。commit();
答案 1 :(得分:0)
当我做了一个" getActivity()。findViewById(R.id.userid));"来自片段B,它正在拾取之前的值,但是如果我做了一个" getView()。findViewById(R.id.userid));"从片段A,然后它获取正确的值。 R.id.userid驻留在片段A布局中。如果我从片段B做一个getView,我会得到一个NullPointerException。所以我在片段A的edittext上声明了一个文本观察者,它加载了Fragment B可以访问的成员变量,这似乎解决了这个问题。如果有更好的方法,请告诉我。再一次。