我有一个FragmentActivity
中,我让我的片段:TabsPagerAdapter屏幕方向失去实例
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
String[] tabs = {
getResources().getString(R.string.loginData),
getResources().getString(R.string.firmData)
};
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
我创建2个片段,并在这两个我对这个表格的形式和验证。在第二个片段上,我保存了button
** **第一个片段的**触发验证*并获得结果。
这是我的适配器:
public class TabsPagerAdapter extends FragmentPagerAdapter {
private BasicData1Fragment fragment;
public TabsPagerAdapter(FragmentManager fm)
{
super(fm);
}
public void validateBasicData1Fragment()
{
if(fragment != null)
{
fragment.validationCheck();
}
}
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
fragment = new BasicData1Fragment(); //shranimo si referenco na fragment 1, da lahko kaseneje poklicemo metodo
return fragment;
case 1:
// Games fragment activity
return new BasicData2Fragment();
}
return null;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 2;
}
}
我现在的问题是,如果屏幕旋转适配器,我在getItem
保存为空适配器换句话说片段失去对BasicData1Fragment
实例。
我该如何解决这个问题?
编辑: 当我使用setRetainInstance(true); 问题得到了解决,但另一个问题出现了。 如果我改变方向,我的验证会停止工作。
然后,我通过在oncreate中创建editviews一次(使用setRetainInstance(true))来修正验证,但之后我再次丢失了实例。
输入验证码:
public void validationCheck()
{
if(loginFirstName.getText() == null || loginFirstName.getText().toString().isEmpty())
{
loginFirstName.setError(getString(R.string.requiredErrorMessage, getString(R.string.firstName)));
errors[0] = true;
}
else
{
loginFirstName.setError(null);
errors[0] = false;
}
if(loginLastName.getText() == null || loginLastName.getText().toString().isEmpty())
{
loginLastName.setError(getString(R.string.requiredErrorMessage, getString(R.string.lastName)));
errors[1] = true;
}
else
{
loginLastName.setError(null);
errors[1] = false;
}
if(username.getText() == null || username.getText().toString().isEmpty())
{
username.setError(getString(R.string.requiredErrorMessage, getString(R.string.username)));
errors[2] = true;
}
else
{
username.setError(null);
errors[2] = false;
}
//ce je geslo prazno ->nobenega errorja
if(password.getText().toString().isEmpty())
{
errors[3] = false;
errors[4] = false;
Global.LoginRequired = false;
password.setError(null);
}
else if(!password.getText().toString().isEmpty()) //ce ni prazno, mora obstajati tudi potrditev, ki seujema
{
if(!password.getText().toString().equals(passwordConfirm.getText().toString()))
{
passwordConfirm.setError(getString(R.string.passwordsDoesntMatch));
errors[4] = true;
}
else
{
errors[3] = false;
errors[4] = false;
Global.LoginRequired = true;
passwordConfirm.setError(null);
}
}
使这些片段为setRetainInstance(true);那么你可以使用相同的片段实例,即使在屏幕上更改为 – San 2014-11-03 09:38:21
我试过,但有其他问题。我编辑了我的问题与结果。 – 2014-11-03 10:47:33
不要在getItem中创建片段,创建片段,列表并通过适配器构造函数传递 – San 2014-11-03 10:56:24