0

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

4

1 回答 1

0

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

}
于 2013-02-18T09:09:47.463 回答