fragmentcontainerview转变成NavHostFragment后,如何监听它当前是哪个片段
时间: 2023-05-11 07:05:43 浏览: 46
好的,这是一个统计类的问题,我可以回答。根据您提供的信息,我可以计算出10名同学的优秀率和及格率。假设10名同学的成绩分别为:80, 90, 70, 85, 95, 60, 75, 65, 90, 80。其中,成绩大于等于90分的为优秀,成绩大于等于60分小于90分的为及格。因此,10名同学的优秀率为40%,及格率为60%。
相关问题
FragmentContainerView,但不用NavHostFragment,详细的规范使用方法
FragmentContainerView 是一个用于承载 Fragment 的布局容器,它可以替代旧版的 FragmentActivity 和 FrameLayout 组合的方式。
不使用 NavHostFragment 的情况下,可以通过以下步骤来使用 FragmentContainerView。
1. 在布局文件中添加 FragmentContainerView,例如:
```
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragment_container"
android:name="com.example.MyFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
```
其中,android:name 指定了要显示的 Fragment 类名。
2. 在 Activity 或 Fragment 中使用 FragmentManager 加载 Fragment,例如:
```
val fragmentManager = supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
val myFragment = MyFragment()
fragmentTransaction.replace(R.id.fragment_container, myFragment)
fragmentTransaction.commit()
```
其中,R.id.fragment_container 是 FragmentContainerView 的 ID。
3. 如果需要在 Fragment 中使用 ViewModel,可以使用 ViewModelProvider 来创建和获取 ViewModel,例如:
```
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
```
其中,this 是 Fragment,如果是 Activity 则需要传入 this@ActivityName。
4. 如果需要向 Fragment 传递参数,可以使用 Bundle,例如:
```
val args = Bundle()
args.putString("key", "value")
myFragment.arguments = args
```
在 Fragment 中获取参数:
```
val args = arguments
val value = args?.getString("key")
```
以上就是使用 FragmentContainerView 的基本流程,希望对您有所帮助。
用Fragmentcontainerview ,但不用NavHostFragment,添加多个Fragment的完整例子
可以使用以下步骤添加多个Fragment,但不使用NavHostFragment:
1. 在布局文件中添加 FragmentContainerView:
```xml
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
```
2. 创建多个 Fragment 类,并在 onCreate() 方法中设置布局文件:
```java
public class FirstFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_first, container, false);
}
}
public class SecondFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_second, container, false);
}
}
```
3. 在 Activity 中使用 FragmentTransaction 添加 Fragment:
```java
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
// 添加第一个 Fragment
FirstFragment firstFragment = new FirstFragment();
fragmentTransaction.add(R.id.fragment_container, firstFragment);
// 添加第二个 Fragment
SecondFragment secondFragment = new SecondFragment();
fragmentTransaction.add(R.id.fragment_container, secondFragment);
// 提交事务
fragmentTransaction.commit();
```
这样就可以添加多个 Fragment 到同一个 FragmentContainerView 中了。注意,需要使用不同的 id 来区分每个 Fragment。同时,需要在 FragmentTransaction 中使用 add() 方法来添加 Fragment,而不是使用 replace() 方法。因为使用 replace() 方法会导致 Fragment 的生命周期发生变化,可能会影响到你的业务逻辑。