如何从隐形标签中获取视图?

时间:2014-10-03 10:14:50

标签: android tabs

我正在为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

1 个答案:

答案 0 :(得分:0)

如果您使用FragmentStatePagerAdapter作为适配器的基类,它将在您移动到许多选项卡时删除片段。

使用FragmentPagerAdapter作为基础适配器。我不确定这是不是你的问题,因为你没有适配器代码,但是我遇到了类似的问题并修复了它。