创建多个Fragment可滑动界面
创建新项目,选择Tabbed Activity
默认就有2个Fragment,这里我们删除相关代码。

在切换时
FragmentPagerAdapter
onDestroyView
onCreateView
Fragment没有被销毁
FragmentStatePagerAdapter
onDestroyView
onDestroy
onCreate
onCreateView
Fragment被销毁
建议ViewPager对象使用setOffscreenPageLimit方法
创建新的Fragment并且修改代码
New ->Fragment->blank Fragment
FragmentPagerAdapter子类中的getItem修改如下
Fragment fragment = null; switch (position) { case 0: fragment=new HomeFragment(); break; case 1: fragment=new AboutFragment(); break; } return fragment;
Activity中调用Fragment对象
创建
在FragmentPagerAdapter 的instantiateItem的时候添加Fragment,
在destroyItem的时候删除Fragment。
全部代码
public class MainActivity extends AppCompatActivity { public SparseArray<Fragment> fragments = new SparseArray<>(); private static final int[] TAB_TITLES = new int[]{R.string.tab_text_1, R.string.tab_text_2}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewPager viewPager = findViewById(R.id.view_pager); viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager(),FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { @NonNull @Override public Fragment getItem(int position) { Fragment fragment = null; switch (position) { case 0: fragment=new HomeFragment(); break; case 1: fragment=new AboutFragment(); break; } return fragment; } @Override public int getCount() { return TAB_TITLES.length; } @Nullable @Override public CharSequence getPageTitle(int position) { return getResources().getString(TAB_TITLES[position]); } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { Fragment fragment= (Fragment)super.instantiateItem(container, position); fragments.put(position,fragment); return fragment; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { fragments.remove(position); super.destroyItem(container, position, object); } }); TabLayout tabs = findViewById(R.id.tabs); tabs.setupWithViewPager(viewPager); } }
Fragment调用Activity中的方法
方法1:使用getActivity,转成MainActivity,在调方法
方法2;在Fragment中创建Listener 接口,对象指针,设置对象的方法

public static interface onSpecialListener{ void onSL(String msg); } private onSpecialListener mListener; public void setmListener(onSpecialListener listener) { mListener=listener; }
在Activity中设置Fragment的该接口对象

fragment=new HomeFragment(); HomeFragment homeFragment=(HomeFragment)fragment; homeFragment.setmListener(new HomeFragment.onSpecialListener() { @Override public void onSL(String msg) { ShowMsg(msg); } });
在Fragment中有需求的时候调用该接口,

Button btnHome = v.findViewById(R.id.btnHome); btnHome.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mListener != null) { mListener.onSL("From HomeFragment to MainAct"); } } }); return v;