I have a FragmentActivity
in which I make my fragments:
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));
}
I create 2 fragments and in both I have forms and validations for this forms. On the second fragment i have save button
with **triggers validation* of the first fragment and gets the result.
This is my adapter:
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;
}
}
The problem I have now is that if screen is rotated adapter looses instance on BasicData1Fragment
in other words fragment in the adapter that I save in getItem
is null.
How can I fix this?
EDIT: When I used setRetainInstance(true); The problem was fixed but another arised. My validation stoped working if I do orientation change.
Then I fixed validation by creating editviews only once in oncreate (with setRetainInstance(true)) but then I lost instance again.
Validation code:
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);
}
}