Activity嵌套fragment大全,activity加载单个fragment,TabLayout+ViewPager实现多个fragment滑动效果




itemview按钮,viewpager加载fragment                                            固定按钮,FrameLayout加载fragment



![](https://img-blog.csdnimg.cn/20190604133616654.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21laXhpX2FuZHJvaWQ=,size_16,color_FFFFFF,t_70)                   ![](https://img-blog.csdnimg.cn/20190604133652310.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21laXhpX2FuZHJvaWQ=,size_16,color_FFFFFF,t_70)



 实现方法:

======



### 1、加载单个fragment



framelayout加载fragment



1、activity的layout文件



<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout

xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"

android:layout_height="match_parent">



<FrameLayout

    android:id="@+id/onef"

    android:layout_width="match_parent"

    android:layout_height="match_parent"></FrameLayout>

</android.support.constraint.ConstraintLayout>/3




2、创建fragment



public class Fragment1 extends Fragment {

public static Fragment1 getInstance(Bundle bundle) {

    Fragment1 fg = new Fragment1();

    fg.setArguments(bundle);

    return fg;

}

protected View contentView;



@Override

public 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() {

        @Override

        public 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 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;

}



@Override
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值