我正在为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
?
答案 0 :(得分:0)
如果您使用FragmentStatePagerAdapter作为适配器的基类,它将在您移动到许多选项卡时删除片段。
使用FragmentPagerAdapter作为基础适配器。我不确定这是不是你的问题,因为你没有适配器代码,但是我遇到了类似的问题并修复了它。