其实就是一个节点你也可以理解成一个fragment
1.android:id="@+id/one" 每一个fragment节点都需要有自己的id,很重要. 我们需要在后面的节点上使用这些id指定跳转目标
2.android:name=“demo.yt.com.demo.fragment.BlankFragment” 这个属性是你这个节点所对应的fragment(需要你导入指定的fragment文件路径),这个很重要
3.android:label=“BlankFragment” 一个标签名称,用于记录这个节点的标签信息(大概可能是在代码里的Intent里获取来知晓此次是哪个fragment节点在跳转,没深究了)
4.tools:layout="@layout/fragment_blank" 这个属性不是重要的,设置它后你可以在切换到Design模式后看到,视图页面的fragment的预览图(就在上面的图片里,可以直接看到fragment效果)
在
action 负责编写跳转动作
1. android:id="@+id/action_one_to_two" 这个很重要,它是这个跳转动作的id, 这个id我们将在后面的代码中调用,用于执行fragment的跳转
2. app:destination="@id/two" 跳转的目标fragment,这个很重要
让navigation与Activity关联起来
现在我们已经创建了navigation,但是使用它还需要一个根Activity,它毕竟还是需要依托Activity的.
1.创建了一个叫DemoActivity的Activity.这个没啥,下面来看这个Activity的布局xml怎么配(如下xml代码)
我们就关注fragment的一些属性
1.android:name=“androidx.navigation.fragment.NavHostFragment” 这个非常重要,这是你告知fragment需要使用navigation模式的关键属性,另外它是固定死的.你必须写.
2. app:defaultNavHost=“true” 这是你实现物理按键(比如返回键),是按一下退出一个fragment 还是直接退出这个Activity的关键属性
3.app:navGraph="@navigation/demo_nav" 很重要,这就是我们前面创建的navigation的xml文件
实现fragment跳转与返回
进入到DemoActivity后,首先会自动加载到第一个fragment. 然后我们看看如何跳转到其他fragment中
1.从第一个碎片跳转到第二个碎片,关键代码 Navigation.findNavController(getView()).navigate(R.id.action_one_to_two);
private Button mBtnInputFragment2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_blank, container, false);;
mBtnInputFragment2 = view.findViewById(R.id.btn_input_fragment2);
mBtnInputFragment2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Navigation.findNavController(getView()).navigate(R.id.action_one_to_two);//这个id就是navigation里的action的id
}
});
return view;
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onDetach() {
super.onDetach();
}
2.从第二个碎片返回到第一个碎片,关键代码 Navigation.findNavController(getView()).popBackStack();
private Button mBtnInputFragment3, mBtnBack;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_blank2, container, false);
mBtnInputFragment3 = view.findViewById(R.id.btn_input_fragment3);
mBtnBack = view.findViewById(R.id.back);
mBtnInputFragment3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Navigation.findNavController(getView()).navigate(R.id.action_two_to_three); //进入第三个碎片
}
});
mBtnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Navigation.findNavController(getView()).popBackStack(); //返回上一个碎片
}
});
return view;
}
tener() {
@Override
public void onClick(View v) {
Navigation.findNavController(getView()).popBackStack(); //返回上一个碎片
}
});
return view;
}