Android - 从一个 textView 获取文本并使用 Android 数据绑定设置到另一个
Android - Get text from one textView and set to another with Android Data Binding
如何将文本从一个 textView 设置到另一个?
如果我这样尝试:
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SomeText" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{textView1.getText()}" />
我遇到错误:
Found data binding errors.
****/ data binding error ****msg:Identifiers must have user defined types from the XML file. textView1 is missing it
loc:51:32 - 51:41
****\ data binding error ****
我尝试了很多选择,但没有成功。在此先感谢您的帮助!
尝试这样做:
XML:
<?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">
<data>
<variable
name="activity"
type="com.example.myapplication.MainActivity" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text_view_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{activity.text1}"
android:textColor="@android:color/black"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/text_view_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{activity.text2}"
android:textColor="@android:color/black"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/text_view_1" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Activity:
class MainActivity : AppCompatActivity() {
val text1 = "Test text 1"
val text2 = text1
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
binding.activity = this
}
}
您可以做到这一点,使用 BindingAdapter,提供您对它的看法
在 Kotlin 中就像
object Bindings {
@JvmStatic
@BindingAdapter("app:referencedTextView")
fun getTextFromReferencedTextView(view: TextView, anotherTextView: TextView) {
view.text = anotherTextView.text
}
}
并在目标 textView 中:
app:referencedTextView="@{anotherTextView}"
对我来说这很好用
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="something" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{textView1.text}" />
</LinearLayout>
</layout>
class SimpleFragment : Fragment() {
companion object {
fun newInstance() = SimpleFragment()
}
private lateinit var binding: SimpleFragmentBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
String
binding = SimpleFragmentBinding.inflate(inflater)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
textView1.text = "something else"
}
}
如何将文本从一个 textView 设置到另一个? 如果我这样尝试:
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SomeText" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{textView1.getText()}" />
我遇到错误:
Found data binding errors.
****/ data binding error ****msg:Identifiers must have user defined types from the XML file. textView1 is missing it
loc:51:32 - 51:41
****\ data binding error ****
我尝试了很多选择,但没有成功。在此先感谢您的帮助!
尝试这样做:
XML:
<?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">
<data>
<variable
name="activity"
type="com.example.myapplication.MainActivity" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text_view_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{activity.text1}"
android:textColor="@android:color/black"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/text_view_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{activity.text2}"
android:textColor="@android:color/black"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/text_view_1" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Activity:
class MainActivity : AppCompatActivity() {
val text1 = "Test text 1"
val text2 = text1
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
binding.activity = this
}
}
您可以做到这一点,使用 BindingAdapter,提供您对它的看法
在 Kotlin 中就像
object Bindings {
@JvmStatic
@BindingAdapter("app:referencedTextView")
fun getTextFromReferencedTextView(view: TextView, anotherTextView: TextView) {
view.text = anotherTextView.text
}
}
并在目标 textView 中:
app:referencedTextView="@{anotherTextView}"
对我来说这很好用
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="something" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{textView1.text}" />
</LinearLayout>
</layout>
class SimpleFragment : Fragment() {
companion object {
fun newInstance() = SimpleFragment()
}
private lateinit var binding: SimpleFragmentBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
String
binding = SimpleFragmentBinding.inflate(inflater)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
textView1.text = "something else"
}
}