使用 ViewPager Android Studio 在片段中保存状态

问题描述

需要一些帮助来了解如何在我的单个活动应用程序中保存状态。我查看了一些资源,但找不到适合构建的资源。本质上,我有一个带有 Fragment 容器视图的单一活动,我用它来根据需要换出 Fragment。我的问题是,当生命周期事件发生时我的活动被破坏,带有我的视图寻呼机的片段被恢复,但选项卡上的单个片段没有加载。我无法弄清楚如何正确保存状态。下面是我的代码

Activity:
public class StartActivity extends AppCompatActivity {

   FirebaseAuth mAuth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);
        mAuth = FirebaseAuth.getInstance();

        if (savedInstanceState == null) {
            LoginFragment fragment = new LoginFragment();
            getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.frameLayout,fragment)
                    .commit();
        }
    }


    @Override
    public void onStart() {
        super.onStart();
        FirebaseUser currentUser = mAuth.getCurrentUser();
        if(currentUser != null){
            MainActivity mainActivityFrag = new MainActivity();
            getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.frameLayout,mainActivityFrag)
                    .commit();
        }

    }

    @Override
    public void onSaveInstanceState(@NonNull Bundle outState,@NonNull PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState,outPersistentState);

    }

    @Override
    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
    }
}

Fragment With View Pager:

public class MainActivity extends Fragment {

    private FirebaseAuth mAuth;
    private SectionsPagerAdapter sectionsPagerAdapter;
    private ViewPager viewPager;
    private TabLayout tabs;
    private Toolbar toolbar;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mAuth = mAuth = FirebaseAuth.getInstance();

    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_main,container,false);
        sectionsPagerAdapter = new SectionsPagerAdapter(getContext(),((AppCompatActivity)getActivity()).getSupportFragmentManager());
        viewPager = view.findViewById(R.id.view_pager);
        viewPager.setAdapter(sectionsPagerAdapter);
        tabs = view.findViewById(R.id.tabs);
        tabs.setupWithViewPager(viewPager);
        tabs.showContextMenu();
       toolbar = view.findViewById(R.id.topAppBar);
       ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
       ((AppCompatActivity)getActivity()).getSupportActionBar().setdisplayShowTitleEnabled(false);
        setHasOptionsMenu(true);
        tabs.getTabAt(0).setIcon(R.drawable.home_selector);
        tabs.getTabAt(1).setIcon(R.drawable.destination);
        tabs.getTabAt(2).setIcon(R.drawable.mail_outline_blk);
        tabs.getTabAt(3).setIcon(R.drawable.notification_bell);
        

        return view;
    }

    @Override
    public void onCreateOptionsMenu(@NonNull Menu menu,@NonNull MenuInflater inflater) {
        super.onCreateOptionsMenu(menu,inflater);
        menu.clear();
        inflater.inflate(R.menu.main_menu,menu);
    }


    @Override
    public boolean onoptionsItemSelected(MenuItem item) {
        super.onoptionsItemSelected(item);

        switch (item.getItemId()){
            case R.id.logout:
                mAuth.signOut();
                //navigate to home fragment
                LoginFragment fragment = new LoginFragment();
                ((AppCompatActivity)getActivity()).getSupportFragmentManager()
                        .beginTransaction()
                        .replace(R.id.frameLayout,fragment)
                        .commit();
                return true;
            default:

                return false;
        }

    }

    @Override
    public void onResume() {
        super.onResume();

    }

    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {

        super.onSaveInstanceState(outState);
    }
}

Adapter Code:

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    @StringRes
    private static final int[] TAB_TITLES = new int[]{R.string.tab_text_1,R.string.tab_text_2,R.string.tab_text_3,R.string.tab_text_4};
    private final Context mContext;

    public SectionsPagerAdapter(Context context,FragmentManager fm) {
        super(fm,BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);

        mContext = context;
    }

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class below).
        switch (position){
            case 0:
                PostFragment postFragment = new PostFragment();
                return postFragment;
            case 1:
                TestFragment userFeedFragmentt = new TestFragment();
                return userFeedFragmentt;

            default:
                TestFragment  userFeedFragmenttt = new TestFragment();
                return userFeedFragmenttt;
        }
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return mContext.getResources().getString(TAB_TITLES[position]);
    }

    @Override
    public int getCount() {
        // Show 2 total pages.
        return 4;
    }


}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)