Tabitem绑定在android工作室

时间:2017-04-11 07:08:37

标签: java android android-fragments build.gradle android-databinding

大家好! :)

我需要在选项卡式活动(或片段)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文件中带有这些代码的标签项(带有绑定):

  1. 初始化我的绑定类实例:

    <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>
    
  2. 现在,这个绑定实例在使用中(返回null !!但为什么?):

    binding.tabItem1;这是空的,但我不知道为什么?

  3. 我需要使用tab.item_layout绑定类实例的tabitem布局项(tab_item_name_text_view和tab_item_number_text_view),bind.tabItem1.bindingClassInstanceReturnedItem&lt;&lt; - 但我没有:\

  4. 对这个问题有什么想法吗? :\ 再见! :)

    (抱歉,我的英文不好)

3 个答案:

答案 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
    }

其中“绑定”是片段/活动的根绑定。