Android Fragment嵌套

这里写一个一个从一个fragment跳转到另一个fragment
首先fragment嵌套不要套太多,否则会变得繁重,然后出现一些bug,更难操作。
一般来说嵌套1、2个最好。

这里只放最简单的实现代码:一个Activity放一个fragment,这个fragment里嵌套一个fragment。
多个fragment可以通过fragment数组来选择,所以就不做这些代码了。

首先定义Activity里面划分一个container
用FragmentTransaction的add方法和show方法来放置fragment

public class MainActivity extends AppCompatActivity {

    private OutterFragment fragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        fragment = new OutterFragment();

        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.add(R.id.container,fragment)
                .show(fragment).commitAllowingStateLoss();
    }
}

接着定义一个OutterFragment,里面内嵌一个InnerFragment
我也是用getFragmentManager().beginTransaction()的add和show方法来放置这个碎片

public class OutterFragment extends Fragment {

    private Button button;
    private InnerFragment innerFragment;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.outter,container,false);
        button = view.findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 innerFragment = new InnerFragment();
                getFragmentManager().beginTransaction()
                        .add(R.id.container,innerFragment).show(innerFragment).commitAllowingStateLoss();
            }
        });

        return view;
    }
}

InnerFragment就不放了

因为之前写嵌套出现了“The specified child already has a parent. You must call removeView”这种类似的问题,解决方法一个是在onCreateView()里面返回的view的AttachToRoot要设置为false,不然编译时会认为你的fragment已经有一个父控件,不给你嵌套或者放在activity上。

猜你喜欢

转载自blog.csdn.net/rikkatheworld/article/details/80820011