这里写一个一个从一个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上。