如何使用数据绑定和导航组件访问嵌套视图?
How to access to nested view using data binding and navigation component?
我正在使用 android 数据绑定和导航组件。我有 activity_member
布局。此布局包括另一个布局:
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/appbar" />
并在 app_bar_main
布局中包含另一个布局:
<include
android:id="@+id/member"
layout="@layout/content_main" />
在content_main
我想把主要主机fragmnet 用于使用导航组件:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".ui.MembersPage.MemberActivity"
tools:showIn="@layout/app_bar_main">
<fragment
android:id="@+id/my_nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="500dp"
app:defaultNavHost="true"
app:navGraph="@navigation/navigation"
tools:layout_editor_absoluteX="-29dp"
tools:layout_editor_absoluteY="215dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
这是导航图中的主机片段。我需要在 java class 中访问 recyclerView 但我不能:
binding.appbar.member.membersRecycler.setLayoutManager(new GridLayoutManager(this, 3));
和:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".MembersFragment"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/membersRecycler"
android:layout_width="400dp"
android:layout_height="wrap_content" />
</FrameLayout>
在这种情况下如何访问嵌套元素,例如此处的 recyclerView id?
我将举例说明如何在您的情况下访问视图。
假设您在 class object myObject
中有一个字符串 title
从 activity_member
传递到 app_bar_main
并且您的 object在activity_member
.
中是这样定义的
<data>
<variable
name="myObject"
type="com.example.model.Object"/>
</data>
现在要将 myObject
中名为 title
的字符串传递给 app_bar_main
,您必须在 app_bar_main
中定义变量
像这样
<data>
<variable
name="title"
type="String"/>
</data>
这样做之后,您将能够从您在 activity_member
布局中包含 app_bar_main
的位置传递标题。
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/appbar"
app:title = "@{myObject.title}"/>
此外,现在您将能够访问 app_bar_main
中的所有视图。假设您有一个 ID 为 myTextView
的视图
TextView textView = binding.appbar.myTextView;
我认为您应该将 RecyclerView 标记放在片段布局中,并在片段中使用 DataBinding class。
我正在使用 android 数据绑定和导航组件。我有 activity_member
布局。此布局包括另一个布局:
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/appbar" />
并在 app_bar_main
布局中包含另一个布局:
<include
android:id="@+id/member"
layout="@layout/content_main" />
在content_main
我想把主要主机fragmnet 用于使用导航组件:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".ui.MembersPage.MemberActivity"
tools:showIn="@layout/app_bar_main">
<fragment
android:id="@+id/my_nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="500dp"
app:defaultNavHost="true"
app:navGraph="@navigation/navigation"
tools:layout_editor_absoluteX="-29dp"
tools:layout_editor_absoluteY="215dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
这是导航图中的主机片段。我需要在 java class 中访问 recyclerView 但我不能:
binding.appbar.member.membersRecycler.setLayoutManager(new GridLayoutManager(this, 3));
和:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".MembersFragment"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/membersRecycler"
android:layout_width="400dp"
android:layout_height="wrap_content" />
</FrameLayout>
在这种情况下如何访问嵌套元素,例如此处的 recyclerView id?
我将举例说明如何在您的情况下访问视图。
假设您在 class object myObject
中有一个字符串 title
从 activity_member
传递到 app_bar_main
并且您的 object在activity_member
.
<data>
<variable
name="myObject"
type="com.example.model.Object"/>
</data>
现在要将 myObject
中名为 title
的字符串传递给 app_bar_main
,您必须在 app_bar_main
中定义变量
像这样
<data>
<variable
name="title"
type="String"/>
</data>
这样做之后,您将能够从您在 activity_member
布局中包含 app_bar_main
的位置传递标题。
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/appbar"
app:title = "@{myObject.title}"/>
此外,现在您将能够访问 app_bar_main
中的所有视图。假设您有一个 ID 为 myTextView
TextView textView = binding.appbar.myTextView;
我认为您应该将 RecyclerView 标记放在片段布局中,并在片段中使用 DataBinding class。