簡體   English   中英

將Viewpager片段的狀態保存在導航抽屜片段中

[英]Save state of viewpager fragment in navigation drawer fragments

我有導航抽屜。在導航抽屜的第一個部件中有viewpager,並且有來自網絡的信息.Viewpager也有2個片段。當我將片段切換到導航抽屜的Settings片段並回到該片段時,一切都消失了。沒有任何信息..如何保存此片段的狀態?或者我可以通過哪種方法再次發送請求以從網絡獲取信息

主要活動

          public class MainActivity extends AppCompatActivity implements 

        NavigationView.OnNavigationItemSelectedListener {

        private DrawerLayout drawer;

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    drawer = (DrawerLayout) findViewById(R.id.drawer_layout);


    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    getSupportFragmentManager()
            .beginTransaction()
            .replace(R.id.motherFragments, FragmentMainPage.newInstance("MainPage"))
            .commit();
}

@Override
public void onBackPressed() {
   drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home: {
            drawer.openDrawer(GravityCompat.START);
            break;
        }

    }

    return super.onOptionsItemSelected(item);
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    Fragment fragment = null;

    if (item.isChecked()) {
        drawer.closeDrawer(GravityCompat.START);
        return false;
    }
    switch (item.getItemId()) {

        case R.id.home: {
            fragment = new FragmentMainPage().newInstance("Sample");
            break;
        }
        case R.id.settings:{
            Intent intent = new Intent(this,SettingsActivity.class);
            startActivity(intent);
            break;
        }
        case R.id.incoming:{
            fragment  = new FragmentIncomingPage().newInstance("Sample");
            break;
        }

    }

    if (fragment != null) {
        getSupportFragmentManager()
                .beginTransaction().replace(R.id.motherFragments, fragment)
                .commit();
        item.setChecked(true);

    }

    drawer.closeDrawer(GravityCompat.START);
    return true;
} }

導航抽屜的Fragment1

            public class FragmentMainPage extends Fragment implements 
         ViewPager.OnPageChangeListener {
             private Toolbar toolbar;
              private MainActivity activity;
           private TabLayout tabLayout;
             private ViewPager viewPager;

String[] names = {
        "Sample 1",
        "Sample 2"

};



private static FragmentMainPage myInstance;
public static FragmentMainPage newInstance(String testString){
    Bundle bundle = new Bundle();
    bundle.putString("test",testString);
    if(myInstance == null){
        myInstance = new FragmentMainPage();
    }
    myInstance.setArguments(bundle);
    return myInstance;
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    activity = ((MainActivity) context);
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_fragment_main,container,false);
    toolbar = (Toolbar) view.findViewById(R.id.toolbar);

    activity.setSupportActionBar(toolbar);
    activity.setTitle(getResources().getText(R.string.bosh_sahifa));
    activity.getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp);
    activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    viewPager = (ViewPager) view.findViewById(R.id.viewpager);
    setupViewpager(viewPager);
    tabLayout = (TabLayout) view.findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
    viewPager.addOnPageChangeListener(this);
    setupTabName();

    return view;
}


private void setupViewpager(ViewPager viewPager) {
    MyAdapter adapter = new MyAdapter(getActivity().getSupportFragmentManager());
    adapter.addFragement(new Fragment_home1());
    adapter.addFragement(new Fragment_home2());

    viewPager.setAdapter(adapter);

}

private void setupTabName() {
    tabLayout.getTabAt(0).setText(names[0]);
    tabLayout.getTabAt(1).setText(names[1]);

}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);


}

@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {

}

@Override
public void onPageScrollStateChanged(int state) {

}

private class MyAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();

    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }
    public void addFragement(Fragment fragment){
        mFragmentList.add(fragment);
    }
}

}

導航抽屜的片段2

             public class FragmentIncomingPage extends Fragment  {
             private Toolbar toolbar;
               private MainActivity activity;




private static FragmentIncomingPage myInstance;
public static FragmentIncomingPage newInstance(String testString){
    Bundle bundle = new Bundle();
    bundle.putString("test",testString);
    if(myInstance == null){
        myInstance = new FragmentIncomingPage();
    }
    myInstance.setArguments(bundle);
    return myInstance;
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    activity = ((MainActivity) context);
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_fragment_incoming,container,false);
    toolbar = (Toolbar) view.findViewById(R.id.toolbar);

    activity.setSupportActionBar(toolbar);
    activity.setTitle(getResources().getText(R.string.Incoming));
    activity.getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp);
    activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    return view;
}

}

您可以使用fragment.addToBackStack(null)方法。 喜歡,

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, A);
ft.addToBackStack(null);
ft.commit();

實現它的方法很少。

  1. 您可以使用SharedPreferences通過mViewPager.getCurrentItem()保存當前的Fragment,並在通過導航抽屜按鈕進入ViewPager活動后再次進行設置。

  2. 使用BaseFragment並從Base Fragment中實現您的片段,將View分頁器的當前可見片段保留在Base Fragment旁邊作為受保護的變量。

  3. 作為上述基礎片段,您可以使用Bas Activity類。

有3個片段並滑動到第3個片段然后返回第1個片段,第1個片段的數據不見了?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM