创建多个Fragment可滑动界面

创建新项目,选择Tabbed Activity

默认就有2个Fragment,这里我们删除相关代码。

在切换时
FragmentPagerAdapter
   onDestroyView
    onCreateView

Fragment没有被销毁


FragmentStatePagerAdapter
    onDestroyView
    onDestroy
    onCreate
    onCreateView

Fragment被销毁

建议ViewPager对象使用setOffscreenPageLimit方法
FragmentPagerAdapter和FragmentStatePagerAdapter的区别

 创建新的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;
    }
View Code

在Activity中设置Fragment的该接口对象

                        fragment=new HomeFragment();
                        HomeFragment homeFragment=(HomeFragment)fragment;
                        homeFragment.setmListener(new HomeFragment.onSpecialListener() {
                            @Override
                            public void onSL(String msg) {
                                ShowMsg(msg);
                            }
                        });
View Code

 在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;
View Code

 

原文地址:https://www.cnblogs.com/noigel/p/11741359.html