2014-10-03 3 views
0

Android 용 앱을 디자인 중이며 탭 인터페이스 (3 탭, 탭 당 하나의 조각)를 사용하는 특정 활동이 있습니다. 여태까지는 그런대로 잘됐다.보이지 않는 탭에서보기를 얻으려면 어떻게해야합니까?

문제는 사용자가 탭에 필요한 모든 정보를 입력하고 버튼을 누르면 모든 정보를 검색해야한다는 것입니다. 그러나 getViewById을 호출하여 표시되지 않는 탭 중 하나에있는보기를 가져 오면 NULL을 반환합니다.

나는 탭 인터페이스를 설명하는 몇 가지 자습서와 SO 스레드를 읽었지만 그 중 아무도 작동 예제를 제공하지 않았습니다. 그들은 모두 빈 탭을 만들었습니다.

어떻게해야합니까?

편집 : 각 .tml마다 하나씩 3 개의 .xml 파일이 있습니다. 이 탭을 처리하는 활동의 관련 코드입니다 :

그래서
public class SetupActivity extends FragmentActivity implements ActionBar.TabListener { 

ActionBar actionBar; 
ViewPager viewPager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_setup); 

    // Set up the action bar. 
    actionBar = getActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    // Set up the ViewPager with the sections adapter. 
    viewPager = (ViewPager) findViewById(R.id.pager); 
    FragmentManager fm = getSupportFragmentManager(); 


    /** Defining a listener for pageChange */ 
    ViewPager.SimpleOnPageChangeListener pageChangeListener = new ViewPager.SimpleOnPageChangeListener(){ 
     @Override 
     public void onPageSelected(int position) { 
      super.onPageSelected(position); 
      actionBar.setSelectedNavigationItem(position); 
     } 
    }; 

    /** Setting the pageChange listner to the viewPager */ 
    viewPager.setOnPageChangeListener(pageChangeListener); 

    /** Creating an instance of FragmentPagerAdapter */ 
    MyFragmentPagerAdapter fragmentPagerAdapter = new MyFragmentPagerAdapter(fm); 

    viewPager.setAdapter(fragmentPagerAdapter); 
    actionBar.setDisplayShowTitleEnabled(true); 

    /** Defining tab listener */ 
    ActionBar.TabListener tabListener = new ActionBar.TabListener() { 

     @Override 
     public void onTabReselected(Tab arg0, android.app.FragmentTransaction arg1) { 

     } 

     @Override 
     public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) { 
      viewPager.setCurrentItem(tab.getPosition()); 

     } 

     @Override 
     public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) { 

     } 
    }; 

    /** Creating Android Tab */ 
    Tab tab = actionBar.newTab().setText("Partido").setTabListener(tabListener); 
    actionBar.addTab(tab); 
    tab = actionBar.newTab().setText("Equipo").setTabListener(tabListener); 
    actionBar.addTab(tab); 
    tab = actionBar.newTab().setText("Alineación").setTabListener(tabListener); 
    actionBar.addTab(tab); 
} 


/** 
* This method is invoked when the user presses a button on tab number 3 
*/ 
private void checkTeam() throws MatchNotReadyException { 
    EditText teamName = (EditText) findViewById(R.id.editTeamName); // this EditText is in tab number 1 
    String name = teamName.getText().toString(); // I get a NullPointerException here 

    if(name == null || name.isEmpty()) { 
     throw new MatchNotReadyException(); 
    } 

    //some more actions 
} 

, 내가 대신 null의, EditText에 유효한 참조를 얻으려면 어떻게해야합니까?

+2

탭을 작성하는 방법과 조각을 사용하는 방법을 보여주는 코드 스 니펫을 게시하십시오. – AndroidEnthusiast

+0

좋아, 문제를 더 잘 설명 할 수있는 몇 가지 코드를 추가했습니다. 지연 돼서 죄송합니다. – ilvidel

답변

0

어댑터의 기본 클래스로 FragmentStatePagerAdapter를 사용하는 경우 여러 탭으로 이동할 때 Fragment가 삭제됩니다.

기본 어댑터로 FragmentPagerAdapter를 사용하십시오. 나는 당신이 어댑터 코드를 가지고 있지 않기 때문에 당신의 문제인지 확신 할 수 없다. 그러나 비슷한 문제가 있었고 그것을 고쳤다.

관련 문제