Android Scrollable Tabs + Swipe state when swiping

匿名 (未验证) 提交于 2019-12-03 02:52:02

问题:

I'm trying to make an application with multiple Tabs. For each tab I'm using different fragments. And when I leaf through tabs the information in them is changing.

How can I save the state of each tab when swiping?

Code for example:

MainActivity.java:

package com.tabs.example;  import java.util.Locale;  import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.PagerTabStrip; import android.support.v4.view.ViewPager;  public class MainActivity extends FragmentActivity {      SectionsPagerAdapter mSectionsPagerAdapter;     ViewPager            mViewPager;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());          mViewPager = (ViewPager) findViewById(R.id.pager);         mViewPager.setAdapter(mSectionsPagerAdapter);          PagerTabStrip pagerTabStrip = (PagerTabStrip) findViewById(R.id.pager_tab_strip);         pagerTabStrip.setBackgroundColor(Color.BLACK);         pagerTabStrip.setTabIndicatorColor(Color.CYAN);         pagerTabStrip.setTextColor(Color.WHITE);     }      public class SectionsPagerAdapter extends FragmentPagerAdapter {          public SectionsPagerAdapter(FragmentManager fm) {             super(fm);         }          @Override         public Fragment getItem(int position) {              Fragment fragment;             switch (position) {                 case 0:                     fragment = new Fragment1();                     break;                 case 1:                     fragment = new Fragment2();                     break;                 case 2:                     fragment = new Fragment3();                     break;                 default:                     fragment  = null;                     break;             }             return fragment;          }          @Override         public int getCount() {             return 3;         }          @Override         public CharSequence getPageTitle(int position) {             Locale l = Locale.getDefault();             switch (position) {                 case 0:                     return getString(R.string.title_section1).toUpperCase(l);                 case 1:                     return getString(R.string.title_section2).toUpperCase(l);                 case 2:                     return getString(R.string.title_section3).toUpperCase(l);             }             return null;         }     } } 

Fragment1.java:

package com.tabs.example;  import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;  import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date;  public class Fragment1 extends Fragment {      @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {          View root = inflater.inflate(R.layout.fragment1, container, false);          DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");         Date date = new Date();         String time = dateFormat.format(date);          TextView tv1 = (TextView) root.findViewById(R.id.tv1);         tv1.setText(time);          return root;      } } 

Fragment2.java:

package com.tabs.example;  import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;  import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date;  public class Fragment2 extends Fragment {      @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {          View root = inflater.inflate(R.layout.fragment2, container, false);          DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");         Date date = new Date();         String time = dateFormat.format(date);          TextView tv2 = (TextView) root.findViewById(R.id.tv2);         tv2.setText(time);          return root;      } } 

Fragment3.java:

package com.tabs.example;  import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;  import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date;  public class Fragment3 extends Fragment {      @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {          View root = inflater.inflate(R.layout.fragment3, container, false);          DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");         Date date = new Date();         String time = dateFormat.format(date);          TextView tv3 = (TextView) root.findViewById(R.id.tv3);         tv1.setText(time);          return root;      } } 

回答1:

You can cache them all by setting the ViewPagerAdapter like this:

mViewPager.setOffscreenPageLimit(3); 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!