zoukankan      html  css  js  c++  java
  • 创建多个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

     

  • 相关阅读:
    ajax 传递参数中文乱码解决办法
    jQuery 时间戳转化成时间
    IDEA2017 导入 SVN上的 Myeclipse或Eclipse 项目
    ajax返回json数据,对其中日期的解析
    MYSQL 按照字母排序查询
    JVM介绍
    正则表达式
    could not find the main class错误
    转:MyEclipse使用总结——MyEclipse10安装SVN插件
    转:Oracle数据库sqlplus与plsqldev解决乱码
  • 原文地址:https://www.cnblogs.com/noigel/p/11741359.html
Copyright © 2011-2022 走看看