我需要在选项卡式活动(或片段)tabitem中使用自定义布局。
第一 - >我为tabitem定义了这个布局: 的 tab_item_layout.xml
DOM
Databinding所需的布局代码。
二阶>定义了一个tablayout(在片段中,但我没有附加这个): fragment_surf_base.xml(这是带有tablayout的片段)
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<LinearLayout
android:id="@+id/tab_item_root_linear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tab_item_name_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="Wink from"/>
<TextView
android:id="@+id/tab_item_number_text_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
tools:text="1"/>
</LinearLayout>
</layout>
我需要java文件中带有这些代码的标签项(带有绑定):
初始化我的绑定类实例:
<android.support.design.widget.TabLayout
android:id="@+id/surf_tab_layout"
android:layout_width="368dp"
android:layout_height="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
<android.support.design.widget.TabItem
android:id="@+id/tabItem1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout="@layout/tab_item_layout" />
<android.support.design.widget.TabItem
android:id="@+id/tabItem2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout="@layout/tab_item_layout" />
<android.support.design.widget.TabItem
android:id="@+id/tabItem3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout="@layout/tab_item_layout" />
</android.support.design.widget.TabLayout>
现在,这个绑定实例在使用中(返回null !!但为什么?):
binding.tabItem1;这是空的,但我不知道为什么?
我需要使用tab.item_layout绑定类实例的tabitem布局项(tab_item_name_text_view和tab_item_number_text_view),bind.tabItem1.bindingClassInstanceReturnedItem&lt;&lt; - 但我没有:\
对这个问题有什么想法吗? :\ 再见! :)
(抱歉,我的英文不好)
答案 0 :(得分:0)
您需要在fragment_surf_base.xml中执行数据绑定,以获取绑定,如下所示:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="variableName"
type="packagename.yourViewModel" />
</data>
<android.support.design.widget.TabLayout
android:id="@+id/surf_tab_layout"
android:layout_width="368dp"
android:layout_height="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
<android.support.design.widget.TabItem
android:id="@+id/tabItem1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout="@layout/tab_item_layout" />
<android.support.design.widget.TabItem
android:id="@+id/tabItem2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout="@layout/tab_item_layout" />
<android.support.design.widget.TabItem
android:id="@+id/tabItem3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout="@layout/tab_item_layout" />
</android.support.design.widget.TabLayout>
</layout>
答案 1 :(得分:0)
这可能会对你有所帮助。我知道,我不应该使用findViewById()
,但尚未解决这个问题。如果我得到任何答案,我会更新我的答案。
View tabView = binding.surfTabLayout.getTabAt(0).getCustomView();
TextView textView = (TextView) tabView.findViewById(R.id.tab_item_name_text_view);
textView.setText("Hello")
答案 2 :(得分:0)
这就是我的做法:
val tabView = binding.tabLayout.getTabAt(0)?.customView
if (tabView != null){
val tabBinding = DataBindingUtil.bind<ViewTabWithBadgeBinding>(tabReceived)
tabBinding?.count = viewModel.tabBadgeCount
tabBinding?.name = viewModel.tabName
}
其中“绑定”是片段/活动的根绑定。