前言
Fragment的构成其实是和Activity是一样的,有java源码,也有自己人layout文件。
具体的按钮等UI,最后不要直接加在Activity里,应该先加到Fragment里,然后再把Fragment加到Activity里。
加一个Fragment的步骤
1.先加一个java文件
如下,主要包含两个函数 onCreateView 和 onViewCreated 。
package com.example.basicactivityapplication;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.navigation.fragment.NavHostFragment;
public class FirstFragment extends Fragment {
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState
) {
// Inflate the layout for this fragment
// 把这个 fragment 和 layout 文件关联起来。
return inflater.inflate(R.layout.fragment_first, container, false);
}
// 这个可以理解为中断处理函数。
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// 按键的处理函数。
view.findViewById(R.id.button_first).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// NavHostFragment 是盛放 fragment 的容器。所以,这个的意思是切换到当前容器下的另一个 fragment.
NavHostFragment.findNavController(FirstFragment.this)
.navigate(R.id.action_FirstFragment_to_SecondFragment);
}
});
}
}
2.加一个layout文件。
当然, fragment也可以是无layout文件,也就是没有ui。
3.把fragemet加到Activity的layout文件里。
如下图,和普通控件一样拖进来即可。
随后就会出现一个提示框,让你选择关联哪个 fragment,如下图,选一个就好。
会有一个位置未确定的错误,
如下图
解决方法:
把位置信息复制进去即可:
app:defaultNavHost="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.483"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.992"
Fragment复用