有一个空布局 和真正的布局,空布局用于fragment创建时加快创建时间,真正的布局该如何替换进fragment, 使用viewStub会不会影响原本对于布局的viewBinding,不使用viewStub还能怎么做
时间: 2024-03-16 15:45:32 浏览: 14
使用 `ViewStub` 不会影响原本对于布局的 `ViewBinding`,因为 `ViewStub` 实际上也是一个 `View`,可以通过 `findViewById()` 方法获取它的引用,然后使用 `ViewBinding` 绑定其子视图。
如果不想使用 `ViewStub`,可以在 Fragment 创建时使用占位布局,然后在需要显示真正布局时进行替换。
具体实现方法如下:
1. 在 Fragment 的布局文件中添加占位布局和真正布局。
```xml
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/placeholder"
layout="@layout/layout_placeholder"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<include
android:id="@+id/real_layout"
layout="@layout/layout_real"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
</FrameLayout>
```
2. 在 Fragment 中定义占位布局和真正布局对应的 `View`。
```java
private View mPlaceholderView;
private View mRealLayoutView;
```
3. 在 `onCreateView()` 方法中获取占位布局和真正布局对应的 `View`。
```java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_layout, container, false);
mPlaceholderView = view.findViewById(R.id.placeholder);
mRealLayoutView = view.findViewById(R.id.real_layout);
return view;
}
```
4. 在需要显示真正布局的地方将占位布局隐藏,显示真正布局。
```java
mPlaceholderView.setVisibility(View.GONE);
mRealLayoutView.setVisibility(View.VISIBLE);
```
这样就可以在 Fragment 中使用占位布局,在需要显示真正布局时进行替换了。当 Fragment 第一次创建时,只会加载占位布局,可以加快 Fragment 的创建时间。在需要显示真正布局时,通过设置视图的可见性来替换成真正的布局。同时,也不会影响原本对于布局的 `ViewBinding`。