本文已参与「新人创作礼」活动,一起开启掘金创作之路。
基于上次Frangment切换项目下在res文件夹下新建一个文件夹:
编辑
选择navigation选项:
编辑
在里面新建一个navigation文件:(nav1)
编辑
导入依赖:
编辑
对应的网址链接为:
developer.android.google.cn/guide/navig…https://developer.android.google.cn/guide/navigation/navigation-getting-started#groovy在项目的build.gradle里引入依赖:(选择适合自己的版本)
编辑
选择新建的nav1,打开design模式:
编辑
选择new destination:
编辑
分别选择frangment1和frangment2:
编辑
点击上面的按钮,可以选择切换屏幕的方向:
比如下面的意思就是可以从frangment1切换到frangment2以及还可以从frangment2切换到frangemnt2:
编辑
在frangment1里新建一个button,在frangment2里同样操作即可,只是部分名字发生细微变化:
frangment1.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="40sp"
android:text="Frangment1">
</TextView>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn1_2"
android:text="TO_Frangment2">
</Button>
</LinearLayout>
frangment2.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="40sp"
android:text="Frangment2">
</TextView>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn2_1"
android:text="TO_Frangment1">
</Button>
</LinearLayout>
将activity_main.xml改成线性布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_height="match_parent">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragmentContainerView"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="409dp"
android:layout_height="729dp"
app:defaultNavHost="true"
app:navGraph="@navigation/nav1"
tools:layout_editor_absoluteX="1dp"
tools:layout_editor_absoluteY="1dp"
/>
</LinearLayout>
当在线性布局中LinearLayout设置了android:orientation="horizontal"时,表示此时的排列方式为水平方向。
当在线性布局中LinearLayout设置了android:orientation="vertical"时,表示此时的排列方式为垂直方向。
我们把NavHostFrangment拖到里面来:
编辑
拖动进行会自动创建:
编辑
MainActivity.java:
package com.example.myfrangment;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
这时导航栏效果图初步已经建立完成:
编辑
下面需要进行绑定:
在Frangment1里写入如下核心代码:
public class Frangment1 extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.frangment1,null);
Button btn=view.findViewById(R.id.btn1_2);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
return view;
}
}
如何跳转页面?
引入下面一行代码即可:
编辑
Frangment1.java:
public class Frangment1 extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.frangment1,null);
Button btn=view.findViewById(R.id.btn1_2);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Navigation.findNavController(view).navigate(R.id.action_frangment1_to_frangment2);
}
});
return view;
}
}
Frangment2.java:
public class Frangment2 extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.frangment2,null);
Button btn=view.findViewById(R.id.btn2_1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Navigation.findNavController(view).navigate(R.id.action_frangment2_to_frangment1);
}
});
return view;
}
}
最后可以实现页面跳转:
编辑