动态加载fragment配合TabLayout

来源:互联网 发布:无线访客网络设置 编辑:程序博客网 时间:2024/05/17 01:54

这种配合使用TabLayout来控制,获取position比较方便,fragment不需要一次性全部加载,而是在第一次使用的时候加载。也需要WindowManager和事务进行管理。因为没有用到ViewPager,所以没有滑动效果。比较适合做程序大分类主要框架。

一、MyFragment

/** * A simple {@link Fragment} subclass. */public class MyFragment extends Fragment {    private TextView textView;    public MyFragment() {        // Required empty public constructor    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        // Inflate the layout for this fragment        View view = inflater.inflate(R.layout.fragment_my, container, false);        initView(view);        return view;    }    private void initView(View view) {        String title= (String) getArguments().get("title");        textView= (TextView) view.findViewById(R.id.txt_title);        textView.setText(title);    }}

二、TabFragmentActivity 

/** * 动态加载fragment,配合TabLayout */public class TabFragmentActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener {    private TabLayout tabLayout;    private Fragment[] fragments;    private String[] titles = {"天九", "地八", "人七", "和五"};    private int position;    FragmentManager fragmentManager;//获取fragment管理器    FragmentTransaction fragmentTransaction;//获取事务    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_tab_fragment);        initView();    }    /**     * 初始化     */    private void initView() {        fragmentManager = getSupportFragmentManager();//获取fragment管理器        fragments = new Fragment[titles.length];        tabLayout = (TabLayout) findViewById(R.id.tab_nav);        tabLayout.setOnTabSelectedListener(this);//这一句监听放在添加tab之前,才可以默认加载第一页        //添加tab        for (int i = 0; i < titles.length; i++) {            TabLayout.Tab tab = tabLayout.newTab();            tab.setText(titles[i]);            tab.setIcon(R.mipmap.ic_launcher);            tabLayout.addTab(tab, i, i == position);//这一句要先有监听才能选中fragment        }    }    @Override    public void onTabSelected(TabLayout.Tab tab) {        //刚进来没有执行        Fragment fragmentFrom = fragments[position];//获取当前显示的fragment        Fragment fragmentTo = (Fragment) tab.getTag();        if (fragmentTo == null) {            fragmentTo = getItem(tab.getPosition());            tab.setTag(fragmentTo);        }        position = tab.getPosition();//给position赋新值        switchFragment(fragmentFrom, fragmentTo);    }    /**     * 切换显示fragment     *     * @param fragmentFrom     * @param fragmentTo     */    private void switchFragment(Fragment fragmentFrom, Fragment fragmentTo) {        fragmentTransaction = fragmentManager.beginTransaction();//获取事务        //隐藏from        if (fragmentFrom != null) {            fragmentTransaction.hide(fragmentFrom);        }        //先查找fragmentTo是否已经被装载        Fragment fragment = fragmentManager.findFragmentByTag(fragmentTo.getClass().getName());        //如果fragmentTo不存在就装载,存在就显示        if (fragment == null) {            fragmentTransaction.add(R.id.frame_container, fragmentTo);        } else {            fragmentTransaction.show(fragmentTo);        }        fragmentTransaction.commit();    }    /**     * 创建fragment     *     * @param position     * @return     */    private Fragment getItem(int position) {        Fragment fragment = new MyFragment();        Bundle bundle = new Bundle();        bundle.putString("title", titles[position]);        fragment.setArguments(bundle);        fragments[position] = fragment;        return fragment;    }    @Override    public void onTabUnselected(TabLayout.Tab tab) {    }    @Override    public void onTabReselected(TabLayout.Tab tab) {    }}


0 0
原创粉丝点击