我的布局中有两个标签。我无法在非活动选项卡中的EditText中输入输入值。因此,让我们说选择保存registerLoginFragment的选项卡。以下代码返回预期值。
EditText editTextEmail = (EditText)registerLoginFragment.getView().findViewById(R.id.editTextEmail);
但是从第二个选项卡中获取非活动状态的值因NPE而失败,因为非活动选项卡的getView()返回null。所以关注失败:
EditText EditTextFirstName = (EditText)registerPersonalFragment.getView().findViewById(R.id.EditTextFirstName);
因此,当单击第一个选项卡上的按钮时,我需要从两个选项卡获取输入。访问这两个选项卡并输入值。
更多代码:
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if(tab.getTag().toString().equals("LOGIN_TAB")){
if(registerLoginFragment == null){
registerLoginFragment = Fragment.instantiate(this, RegisterLoginFragment.class.getName());
ft.add(R.id.linearLayoutRegister, (Fragment)registerLoginFragment);
}
else{
ft.attach((Fragment)registerLoginFragment);
}
currentFragment = registerLoginFragment;
}
else if(tab.getTag().toString().equals("PERSONAL_TAB")){
if(registerPersonalFragment == null){
registerPersonalFragment = Fragment.instantiate(this, RegisterPersonalFragment.class.getName());
ft.add(R.id.linearLayoutRegister, (Fragment)registerPersonalFragment);
}
else{
ft.attach((Fragment)registerPersonalFragment);
}
currentFragment = registerPersonalFragment;
}
}
显然,这不是从非活动标签获取值的正确方法,但我找不到合适的方法。
我想我可以这样做:Get text from edit text fields that are in multiple tabs
但是有更“优雅”的方式吗?
由于 Velja
答案 0 :(得分:0)
我找到了实现这项任务的有趣方式。我没有分离和附加(或使用FragmentTransaction.replace),而是在tab操作上显示和隐藏我的片段。请注意,使用GONE值非常重要而不是INVISIBLE,因为GONE在视图中不使用任何空格:http://developer.android.com/reference/android/view/View.html#GONE 我会留下问题,听听是否还有更“正确”的方式? 所以重构的代码如下所示:
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if(tab.getTag().toString().equals("LOGIN_TAB")){
if(registerLoginFragment == null){
registerLoginFragment = Fragment.instantiate(this, RegisterLoginFragment.class.getName());
ft.add(R.id.linearLayoutRegister, (Fragment)registerLoginFragment);
}
else{
//ft.attach((Fragment)registerLoginFragment);
registerLoginFragment.getView().setVisibility(View.VISIBLE);
}
currentFragment = registerLoginFragment;
}
else if(tab.getTag().toString().equals("PERSONAL_TAB")){
if(registerPersonalFragment == null){
registerPersonalFragment = Fragment.instantiate(this, RegisterPersonalFragment.class.getName());
ft.add(R.id.linearLayoutRegister, (Fragment)registerPersonalFragment);
}
else{
//ft.attach((Fragment)registerPersonalFragment);
registerPersonalFragment.getView().setVisibility(View.VISIBLE);
}
currentFragment = registerPersonalFragment;
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if(currentFragment != null){
//ft.detach((Fragment)currentFragment);
currentFragment.getView().setVisibility(View.GONE);
}
}