2013-02-18 5 views
0

У меня есть 2 вкладки в моем макете. Я не получаю входное значение, введенное в EditText на неактивной вкладке. Итак, скажем, вкладка, которая удерживает registerLoginFragment, выбрана. Следующий код возвращает ожидаемое значение.Получить вход с неактивной вкладки

EditText editTextEmail = (EditText)registerLoginFragment.getView().findViewById(R.id.editTextEmail); 

Но получить значение из 2 вкладки, которая неактивна завершается с NPE, потому что GetView() вкладки неактивной возвращает нуль. Так следующее неудачу:

EditText EditTextFirstName = (EditText)registerPersonalFragment.getView().findViewById(R.id.EditTextFirstName); 

Так что мне нужно, чтобы получить вход с обеих вкладок при нажатии кнопки на 1-й вкладке щелкают. Обе вкладки посещаются и вводятся значения.

Немногим больше Код:

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

} 
Смежные вопросы