如何解决片段包含绑定不会设置变量
我有一个带有xml文件的片段。 xml文件尝试包含其他xml文件。当我尝试使用绑定设置包含的xml的不同变量时,什么也没有发生。这是我的代码:
片段xml(简短版本):
<include
android:id="@+id/include2"
layout="@layout/sende_option_box"
android:layout_width="0dp"
android:layout_height="147dp"
android:layout_marginStart="16dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="16dp"
app:title='@{"foo"}'
app:numbervalue='@{"foo"}'
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView25" />
包含的xml:
<layout>
<data>
<variable name="title" type="String" />
<variable name="numbervalue" type="String" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout 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="147dp"
android:background="@drawable/parcel_list_item_borderbox"
android:elevation="5dp">
<TextView
android:id="@+id/textView26"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="21dp"
android:layout_marginTop="33dp"
android:text="@{title}"
android:textAppearance="@style/TextAppearanceBoldBody22"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Opptil 10kg"/>
<TextView
android:id="@+id/textView27"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="21dp"
android:text="Norgespakken"
android:textAppearance="@style/TextAppearanceBody15"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView26" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="21dp"
android:layout_marginBottom="15dp"
android:background="@color/postenVeryLightPink"
android:padding="6dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent">
<TextView
android:id="@+id/textView28"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{numbervalue}"
android:textAppearance="@style/TextAppearanceBoldBody15"
android:textColor="@color/postenPrimaryDark"
tools:layout_editor_absoluteX="50dp"
tools:layout_editor_absoluteY="17dp"
tools:text="Fra 149,-"/>
</LinearLayout>
<ImageView
android:id="@+id/imageView6"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginEnd="12dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/alert_message_borderbox_yellow" />
</androidx.constraintlayout.widget.ConstraintLayout>
运行构建,但是没有foo
出现在视图中,这是我想要的。我究竟做错了什么?是因为它是碎片吗?
解决方法
您必须在包含布局的布局文件中调用DataBindingUtil.setContentView<ActivityMainBinding>(this,R.layout.activity_main)
。示例:
included_layout:
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
>
<data>
<variable
name="myTitle"
type="String"/>
</data>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{myTitle}"/>
</layout>
main_activity:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
layout="@layout/included_layout"
app:myTitle="@{`Your Title`}" />
</LinearLayout>
</layout>
MainActivty:
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import com.myniprojects.bindingtest.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
DataBindingUtil.setContentView<ActivityMainBinding>(this,R.layout.activity_main) // HERE You have to call this function
}
}
如果在片段中包含布局,则可以在onCreateView
中调用相同的函数,但不能使用this
而是使用requireActivity
来调用,当然作为第二个参数,您可以传递正确的XML布局。在片段中,您可以调用此函数并返回值:
override fun onCreateView(
inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
): View? {
return DataBindingUtil.setContentView<FragmentBlankBinding>(
requireActivity(),R.layout.fragment_blank
).root
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。