Activity嵌套fragment大全,activity加载单个fragment,TabLayout+ViewPager实现多个fragment滑动效果
生活随笔
收集整理的這篇文章主要介紹了
Activity嵌套fragment大全,activity加载单个fragment,TabLayout+ViewPager实现多个fragment滑动效果
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
加載單個fragment效果? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 頭部標題多個fragment
? ? ? ? ? ? ? ? ?
?底部標題按鈕多個fragment? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?底部標題按鈕多個fragment
FragmentPagerAdapter實現,會重復onCreateView FragmentManager實現。不會重復onCreateViewitemview按鈕,viewpager加載fragment? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 固定按鈕,FrameLayout加載fragment
? ? ? ? ? ? ? ? ? ?
?
?實現方法:
1、加載單個fragment
framelayout加載fragment
1、activity的layout文件
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"android:layout_height="match_parent"><FrameLayoutandroid:id="@+id/onef"android:layout_width="match_parent"android:layout_height="match_parent"></FrameLayout></android.support.constraint.ConstraintLayout>/32、創建fragment
public class Fragment1 extends Fragment {public static Fragment1 getInstance(Bundle bundle) {Fragment1 fg = new Fragment1();fg.setArguments(bundle);return fg;}protected View contentView;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {contentView = inflater.inflate(R.layout.fragment1, container, false);initViews();return contentView;}public void initViews(){TextView textView =(TextView)contentView.findViewById(R.id.f1te);textView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(getContext(),"ssssf1",Toast.LENGTH_SHORT).show();}});}}3、加載fragment
public void switchContent() {//必需繼承FragmentActivity,嵌套fragment只需要這行代碼getSupportFragmentManager().beginTransaction().replace(R.id.onef, new Fragment2()).commitAllowingStateLoss(); }同一布局,顯示不同fragment內容
private GridDemoFragment f_a; private ListDemoFragment f_b; private Fragment[] mFragments; private int mIndex; //方法一,默認第一fragment private void initFragment() {f_a = new GridDemoFragment();f_b = new ListDemoFragment();//添加到數組mFragments = new Fragment[]{f_a, f_b};//開啟事務FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction ft = fragmentManager.beginTransaction();//添加首頁ft.add(R.id.content, f_a).commit();//默認設置為第0個setIndexSelected(0); } //方法一,選中顯示與隱藏 private void setIndexSelected(int index) {if (mIndex == index) {return;}FragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction ft = fragmentManager.beginTransaction();//隱藏ft.hide(mFragments[mIndex]);//判斷是否添加if (!mFragments[index].isAdded()) {ft.add(R.id.content, mFragments[index]).show(mFragments[index]);} else {ft.show(mFragments[index]);}ft.commit();//再次賦值mIndex = index;}?
//方法二,選中替換 private void setIndexSelectedTwo(int index) {switch (index) {case 0:changeFragment(new GridDemoFragment().getFragmentGridDemoFragment());break;case 1:changeFragment(new ListDemoFragment().getFragmentListDemoFragment());break;default:break;} }方法二,默認第一fragment private void changeFragment(Fragment fm) {FragmentManager supportFragmentManager = getSupportFragmentManager();FragmentTransaction transaction = supportFragmentManager.beginTransaction();transaction.replace(R.id.content, fm);transaction.commit(); }?
// 單例(方法二) private static GridDemoFragment fa; public static GridDemoFragment getFragmentGridDemoFragment() {if (fa == null) {fa = new GridDemoFragment();}return fa; }2、FragmentManager實現framelayout加載多個fragment
private Fragment mCurrentFragment; private FragmentManager fragmentManager; private SparseArray<Fragment> mainFragments;?
mainFragments = new SparseArray<>(); fragmentManager = getSupportFragmentManager(); switchFragment(R.id.rl_home); public void switchFragment(int resId) {Fragment fg;if (mainFragments.indexOfKey(resId) > -1) {fg = mainFragments.get(resId);} else {switch (resId) {case R.id.rl_home:mainFragments.put(resId, Fragment1.getInstance(null));break;case R.id.rl_lishi:mainFragments.put(resId, Fragment2.getInstance(null));break;case R.id.rl_me:mainFragments.put(resId, Fragment3.getInstance(null));break;}fg = mainFragments.get(resId);}switchContent(fg); }/*** 切換數據*/ private void switchContent(Fragment fg) {if (fg == null || mCurrentFragment == fg)return;if (mCurrentFragment != null && mCurrentFragment != fg)getSupportFragmentManager().beginTransaction().hide(mCurrentFragment).commitAllowingStateLoss();mCurrentFragment = fg; 、、、、、、、、、、 }3、FragmentPagerAdapter實現viewpager加載多個fragment
public class MyFragmentAdapter extends FragmentPagerAdapter {private List<Fragment> fragmentList;private List<String> titleList;private Context context;public MyFragmentAdapter(FragmentManager fragmentManager, List<Fragment> fragmentList, List<String> titleList,Context context) {super(fragmentManager);this.fragmentList = fragmentList;this.titleList = titleList;this.context = context;}@Overridepublic Fragment getItem(int position) {return fragmentList.get(position);}@Overridepublic int getCount() {return titleList.size();}//注意!!!這里就是我們自定義的布局tab_itempublic View getCustomView(int position){View view= LayoutInflater.from(context).inflate(R.layout.tab_item,null);ImageView iv= (ImageView) view.findViewById(R.id.tab_iv);TextView tv= (TextView) view.findViewById(R.id.tab_tv);switch (position){case 0://drawable代碼在文章最后貼出iv.setImageDrawable(context.getResources().getDrawable(R.drawable.home_icon_selector));tv.setText("首頁");break;case 1:iv.setImageDrawable(context.getResources().getDrawable(R.drawable.txl_icon_selector));tv.setText("通訊錄");break;case 2:iv.setImageDrawable(context.getResources().getDrawable(R.drawable.wd_icon_selector));tv.setText("我的");break;}return view;} }?
demo云盤鏈接:https://pan.baidu.com/s/1FWbP938mW0NB_92WJjHQQA
云盤密碼交流:QQ1085220040
demo鏈接:https://download.csdn.net/download/meixi_android/11225062
?
資訊fragment實現及資訊頻道管理:https://blog.csdn.net/meixi_android/article/details/90715243
總結
以上是生活随笔為你收集整理的Activity嵌套fragment大全,activity加载单个fragment,TabLayout+ViewPager实现多个fragment滑动效果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 倍增LCA code[vs]1036商务
- 下一篇: 高德地图跟百度地图经纬度互转