0

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);
        }
    }
Tadej Vengust
  • 1,351
  • 4
  • 18
  • 35

1 Answers1

0

Add android:configChanges="orientation|keyboardHidden|screenSize" to activity tag in manifest file. This will preserver the data while orientation. Hope this will help you :)

MrDumb
  • 2,140
  • 1
  • 21
  • 31
  • I dont want that since my layouts need to recreate and I am using onSaveInstanceState for saving my data. – Tadej Vengust Nov 03 '14 at 09:23
  • please check [this](http://stackoverflow.com/questions/6787071/android-fragment-how-to-save-states-of-views-in-a-fragment-when-another-fragmen) – MrDumb Nov 03 '14 at 09:31