Как сохранить состояние макета фрагмента после перехода вверх? - PullRequest
0 голосов
/ 27 сентября 2018

Простая реализация 2 вкладок, прикрепленных к MainActivity.java, корневая раскладка задается через OnStart вызов:

  public class MainActivity extends AppCompatActivity implements View.OnClickListener {

  public void updateUi(){

    setContentView(R.layout.nav_layout);
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.addTab(tabLayout.newTab().setText("Navigation"));
    tabLayout.addTab(tabLayout.newTab().setText("History"));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

    ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
    FragmentTransaction statekeeper =getSupportFragmentManager().beginTransaction();
    statekeeper.addToBackStack(null);
    PagerAdapter adapter = new CustomPagerAdapter(getSupportFragmentManager(), this, tabLayout.getTabCount());
    viewPager.setAdapter(adapter);
    viewPager.setOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    mDrawerLayout = findViewById(R.id.drawer_layout);




    viewPager.setOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            //setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });
}

@Override
public void onStart() {
   super.onStart();
    updateUi(currentUser);
}
}

CustomPagerAdapter.java:

    public class CustomPagerAdapter extends FragmentPagerAdapter {

    protected Context mContext;
    int mNumOfTabs=2;


public CustomPagerAdapter(FragmentManager fm, Context context,int n) {
    super(fm);
    mContext = context;
    this.mNumOfTabs=n ;
}

@Override
// This method returns the fragment associated with
// the specified position.
//
// It is called when the Adapter needs a fragment
// and it does not exists.
public Fragment getItem(int position) {
switch (position){


        case 0:
            Fragment frag1 = new Fragment1();
            return frag1;
        case 1:
            Fragment frag2= new Fragment2();
            return frag2;

        default:
            return null;
    }

}

@Override
public int getCount() {
    return mNumOfTabs;
}

}

Fragment1.java:

public class Fragment1 extends Fragment {

@Override
public void onStart() {
    super.onStart();
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout resource that'll be returned
    View rootView = inflater.inflate(R.layout.difusion2, container, false);
    Log.i("view","inflated");

    // Get the arguments that was supplied when
    // the fragment was instantiated in the
    // CustomPagerAdapter
    Bundle args = getArguments();


    return rootView;
}

}

После выполнения действия из настройки параметров до MainActivity.java расположение обоих фрагментов исчезло.обратите внимание, что мой журнал показал, что нет вызова метода OnCreateview, однако во фрагменте вызывается метод OnStart.
в чем может быть причина?

...