2013-02-18 48 views
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

回答

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

}