2014-10-03 45 views
0

我正在爲Android設計一個應用程序,並且我有一個使用選項卡式界面的特定活動(3個選項卡,每個選項卡一個片段)。到現在爲止還挺好。如何從隱形標籤中獲取視圖?

問題是,一旦用戶在選項卡中輸入了所有必需的信息並按下按鈕,我需要檢索所有信息。但是,當我調用getViewById嘗試獲取不可見選項卡中的某個視圖時,它將返回NULL

我已閱讀了幾個教程和SO線程解釋標籤界面,但沒有一個提供了一個工作示例;他們都創建了空白標籤。

我該怎麼做?

編輯:我有三個.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 
} 

所以,我有什麼做的就是給EditText一個有效的參考,而不是null

+2

請發佈代碼片段以展示如何構建選項卡並使用片段 – AndroidEnthusiast 2014-10-03 10:21:58

+0

好吧,我已經添加了一些代碼以更好地解釋該問題。抱歉耽擱了。 – ilvidel 2014-10-21 11:26:48

回答

0

如果您使用FragmentStatePagerAdapter作爲適配器的基類,它將在您移動到許多選項卡時刪除碎片。

使用FragmentPagerAdapter作爲您的基礎適配器。我不確定這是否是您的問題,因爲您沒有適配器代碼,但我遇到了類似的問題並修復了它。