2013-02-18 5 views
0

내 레이아웃에 2 개의 탭이 있습니다. 비활성 탭에서 EditText에 입력 한 값을 가져 오지 못했습니다. 그래서 registerLoginFragment를 담고있는 tab이 선택됩니다. 다음 코드는 예상 값을 반환합니다.비활성 탭에서 입력 받기

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

는하지만 비활성 2 탭에서 값을 얻는 것은 비활성 탭의 NPE의 getView 때문에()는 null를 돌려 실패합니다. 그래서 다음과 같이 실패합니다 :

그래서 첫 번째 탭의 버튼을 클릭하면 두 탭에서 입력을 받아야합니다. 두 탭 모두 방문하고 값을 입력했습니다.

조금 더 코드 :

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은 뷰의 공간을 사용하지 않으므로 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); 
    } 

} 
관련 문제