gpt4 book ai didi

java - 在多个布局中使用 ViewBinding

转载 作者:行者123 更新时间:2023-11-29 22:46:09 31 4
gpt4 key购买 nike

编辑 - 解决方案

使用 View 绑定(bind)时,会为每个 xml 生成一个 Java 绑定(bind)文件。问题是当您修改 xml 时,它不会重新生成 Java 文件。因此,当我向 activity_main.xml 中的 App_bar_main 添加一个 ID 标记时,我收到一条错误消息,指出找不到该标记不是因为它不喜欢它,而是因为它仍在使用旧的 Java 文件。使缓存失效并重新启动也不会影响那些生成的 java 绑定(bind)文件。

重新生成文件的唯一方法是删除它们。

有了添加的 ID,我只需使用它的 ID 调用 appBarMain,而不是试图扩充它的布局。

public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
...
private ActivityMainBinding mActivityMainBinding;
private AppBarMainBinding mAppBarMainBinding;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivityMainBinding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(mActivityMainBinding.getRoot());

mAppBarMainBinding = mActivityMainBinding.appBarMain;
setSupportActionBar(mAppBarMainBinding.toolbar);

mAppBarMainBinding.fabCollapse.fab_collapse.setOnClickListener(view -> {
Log.d(TAG, "Clicked fab_collapse");
});
}
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">

<include
layout="@layout/app_bar_main"
android:id="@+id/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />

</androidx.drawerlayout.widget.DrawerLayout>

感谢大家的贡献

原创

我正在尝试切换 findViewById在我的应用程序中调用新添加的 ViewBinding但我在与 setContentView() 中调用的 View 交互时遇到问题

我膨胀 AppBarMainBinding 的方式有误吗?还是我错过了其他东西?

public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
...
private ActivityMainBinding mActivityMainBinding;
private AppBarMainBinding mAppBarMainBinding;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivityMainBinding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(mActivityMainBinding.getRoot());

mAppBarMainBinding = AppBarMainBinding.inflate(getLayoutInflater());
setSupportActionBar(mAppBarMainBinding.toolbar);

mAppBarMainBinding.fabCollapse.fab_collapse.setOnClickListener(view -> {
Log.d(TAG, "Clicked fab_collapse");
});
}
}

activity_main.xml包含 <include layout="@layout/app_bar_main" />和菜单

app_bar_main.xml包含一个工具栏和一些操作按钮

在这种情况下,如果我调用 setContentView(mActivityMainBinding.getRoot()) ,在主 Activity 的 onCreat() 中,应用启动 activity_main布局并显示操作按钮和工具栏占位符,但这些按钮均无效。单击操作按钮不会调用其 setOnClickListener并且工具栏是空白的(它没有实现 setSupportActionBar(toolbar) )

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">

<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />

</androidx.drawerlayout.widget.DrawerLayout>

app_bar_main.xml

<?xml version="1.0" encoding="utf-8"?>

<!-- Min api = 21
Add: Screen capture -->

<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">

<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />

</com.google.android.material.appbar.AppBarLayout>

<include layout="@layout/content_main" />

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/fab_collapsed_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:layout_dodgeInsetEdges="bottom">

<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab_collapse"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:backgroundTint="@android:color/holo_orange_dark"
app:fabSize="mini"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@android:drawable/arrow_up_float" />

</androidx.constraintlayout.widget.ConstraintLayout>



</androidx.constraintlayout.widget.ConstraintLayout>


</androidx.coordinatorlayout.widget.CoordinatorLayout>

谢谢

最佳答案

你只需要设置content view,然后你就可以通过mActivityMainBinding.appBarMain访问appbar。

关于java - 在多个布局中使用 ViewBinding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58436456/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com