Java 从非活动选项卡获取输入

Java 从非活动选项卡获取输入,java,android,Java,Android,我的布局中有两个选项卡。我无法获取在非活动选项卡的EditText中输入的输入值。所以,假设选中了保存registerLoginFragment的选项卡。以下代码返回预期值 EditText editTextEmail = (EditText)registerLoginFragment.getView().findViewById(R.id.editTextEmail); 但使用NPE从非活动的第二个选项卡获取值失败,因为非活动选项卡的getView()返回null。因此,以下是失败之处: E

我的布局中有两个选项卡。我无法获取在非活动选项卡的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;
    }

}
显然,这不是从非活动选项卡获取值的正确方法,但我没有找到正确的方法

我想我能做到:

但是有没有更“优雅”的方式呢

谢谢
Velja

我找到了完成这项任务的有趣方法。我没有分离和附加(或使用FragmentTransaction.replace),而是在选项卡操作上显示和隐藏我的片段。请注意,使用GONE值且不可见非常重要,因为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);
    }

}