从非活动选项卡获取输入

时间:2013-02-18 08:47:17

标签: java android

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

1 个答案:

答案 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);
    }

}