微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?